-- Шаблон создан мастером бланков
-- 08.11.2005 10:32:44
--
БланкСШаблоном "Служебный бланк";

var ТекГод:I=2011;

var crdНастр          :S="РПО_ДОГОВОР_НАСТР";
var crdДоговор        :S="РПО_ДОГОВОР";
var crdДоговор_Признак:S="РПО_ДОГОВОР_ПРИЗНАК";
var crdДоговор_КБК    :S="РПО_ДОГОВОР_ПОЗИЦИИ";
var crdДоговор_ТМЦ    :S="РПО_ДОГОВОР_ПОЗИЦИИ_ТМЦ";
var crdДО             :S="РПО_ДО";
var crdБО             :S="РПО_СВЕД_БО";

var blnНастр          :S="РАБ.ВСПОМ.ДОГОВОР_НАСТР";
var blnДоговор        :S="ИНФО.ДОГОВОР";
var blnДоговор_Признак:S="ИНФО.ДОГОВОР.ПРИЗНАК";
var blnДоговор_КБК    :S="РАБ.ВСПОМ.ДОГОВОР_ПОЗИЦИИ_КБК";
var blnДоговор_ТМЦ    :S="РАБ.ВСПОМ.ДОГОВОР_ПОЗИЦИИ_ТМЦ";
var blnДоговор_Прил1  :S="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ПРИЛ1_СВЕДЕНИЯ";
var blnДоговор_Прил2  :S="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ПРИЛ2_ИСПОЛ";
var blnДО             :S="ДОКУМЕНТЫ.ДОГОВОРПОСТ.ДО";
var blnБО             :S="ДОКУМЕНТЫ.ЛБО.СВЕД_БО";

var УпрLS  :I;
var ЗаглLS :S;
var BufLS[]:S;
var ROLS   :L;
sLS        :Section;

var Run:L;

var DefTPL:L=not Run;

var МаскаСчКБК:S="(*.?.501.?3.*|*.?.502.?1.*|*.?.502.?2.*|*.1.304.05.*|*.2.ЗАБ.РХ.*|*.2.506.?2.*)";

var Buf[]:S;

var idxЗнач[]:S;
var idxКлюч[]:S;
var idxИндекс[]:I;
var idx:I;

var ДН:D;
var ДК:D;
var СумДок:N;
var СумРубДок:N;
var СумАванс:N;
var СумТек:N;
var СумРубТек:N;
var ОплДок:N;
var ОплРубДок:N;
var ОплТек:N;
var ОплРубТек:N;
var Года[]:S;
var ГодТек:I;
var СумГод[]:N;
var Контр_Банк: Record;
var Статус:I;
var Рег:L;

var ВалОпл:S;

var lstКлюч[]     :S;
var lstКлюч1[]    :S;
var lstТекст[]    :S;
var lstКарт[]     :S;
var lstДок[]      :Record;
var lstНомДок[]   :S;
var lstДатДок[]   :D;
var lstДатРег[]   :D;
var lstАванс[]    :L;
var lstАннул[]    :L;
var lstТекГод[]   :S;
var lstВД[]       :S;
var lstКБК[]      :S;
var lstОбщПризн1[]:S;
var lstОбщПризн2[]:S;
var lstПризн[]    :S;
var lstПризнДоп[] :S;
var lstПризнОКДП[]:S;
var lstСум[]      :N;
var lstСумРуб[]   :N;
var lstОпл[]      :N;
var lstОплРуб[]   :N;
var lstТМЦ[]      :Record;
var lstПредм1[]   :S;
var lstПредм2[]   :S;
var lstПредм3[]   :S;
var lstПредм4[]   :S;
var lstТМЦ16[]    :I;
var lstОКДП_Гр[]  :S;
var lstОКДП[]     :S;
var lstЕдИзм[]    :S;
var lstКол[]      :N;
var lstЦена[]     :N;
var verОКДП_Гр    :I;

var altЗагл:S;
var altЗнач:S;
var altВсе :I;

var inclПризнОКДП:I;

var exclОплДок  :Record;
var exclОплКарт :S;
var exclЗКР     :L;
var exclЗачетАв :L;
var exclСписанАв:L;
var exclЗачет   :L;

var skipИмяПолеКарт:L;

var buf3КорСч[]:S;
var buf5КорСч[]:S;
var buf8КорСч[]:S;

var cacheОКДП_Код []:S; --Код+"#"+Показатель
var cacheОКДП_Знач[]:S;
--
--Процедуры и функции -------------   
Func Symbol (S:S):S;
var ch:i;
 ch=AscII(S);
 if not ((ch>=48 and ch<=57) or (ch>=65 and ch<=90) or ch=95 or (ch>=97 and ch<=122) or (ch>=192 and ch<=255)):
    S="_";
 fi;
 ^S;
end;

Func ConvertStr (Src:S):S;
var L,n:i;
var S:S;
var R:S;
 R="";
 L=Length(Src);
 for n=1..L do
  S=SubStr(Src,n,1);
  R=R+Symbol(S);
 od;
 ^R;
end;

Func КодВПризнак(vКод:S):S;
var n,w:i;
var Ret,tmp:S;
 w=WordsCount(vКод,"@");
 Ret="";
 for n=1..w do
  tmp=ExtractWord(n,vКод,"@");
  Ret=Ret+"."+ConvertStr(tmp);
 od;
 ^SubStr(Ret,2,255);
end;

Func ЗагрузСправ(vКарт:S; vФайл:S; vФормат:I; vЗапрос:S):I;
var OWA,Ret,i:i;
var Flag:L;
 Ret=-1;
 if not ExistsCardFile(vКарт) or not isVisible(vКарт): ^Ret; fi;
 OWA=OpenWorkArea(vКарт,"","");
 Try
  if not Records(OWA)=0: ^1; fi;
 Finally
  CloseWorkArea(OWA);
 end;
 if not CanInsert(vКарт) or not CanUpdate(vКарт) or not CanDelete(vКарт): ^Ret; fi;
 if vФормат=ieCRD:
    if not ExistFile(vФайл+".cdf") or not ExistFile(vФайл+".crd"): ^Ret; fi;
   else
    if not ExistFile(vФайл): ^Ret; fi;
 fi;
 if not vЗапрос="":
    if EnqOkCancel(vЗапрос,mtWarning)=cmCancel: ^Ret; fi;
 fi;
 Try
  if Раб.Бюджет2005.Сетевая:
     i=Раб.Семафор.Статус(vКарт,0);
     if not i=0 then
        if i=1: Message("Операция уже выполняется пользователем "+Раб.Семафор.mUser,mtWarning); fi;
        ^Ret;
     fi;
     Раб.Семафор.Установить(vКарт,0,0,"",True,1.1.100,0);
     Flag=True;
  fi;
  ImportCard(vФормат, --Формат
             vКарт, --Картотека обязательное имя картотеки, в которую импортируется заданный файл
             vФайл, --Файл полное или короткое имя файла со структурой заданной картотеки
             False, --ВидимПоля загружать только видимые поля (Истина) или все поля (Ложь)
             False, --Режим загружать поля CreateTime, UpdateTime, CreatedUser, ModifiedUser
             False, --DOS загружать текст в кодировке DOS (Истина) или в кодировке Windows (Ложь);
             True, --Подтв запрашивать подтверждения (Истина) или нет (Ложь).
             ovrRepl, --Действ целочисленная константа для разрешения конфликтных ситуаций в импорте
             True, --Удал удалять содержимое картотеки (Истина) или нет (Ложь);
             False, --ПоказДиалог показывать диалог соответствия полей (Истина) даже
             False --Настройки логический параметр, определяющий, использовать ли настройки браузера картотеки при загрузке
            );
  Ret=1;
 Finally
  if Раб.Бюджет2005.Сетевая and Flag: Раб.Семафор.Снять(vКарт,true); fi;
 end;
 Message("Загрузка завершена");
 if Ret=1 and vКарт="РПО_ОКДП": 
    ExecuteProc("Раб.Вспом.Импорт_Справ.СинхронОКДП",601);
    ExecuteProc("Раб.Вспом.Импорт_Справ.СинхронОКДП",273);
 fi;
 ^Ret;
end;

Func СтатусКонтрагента (Val:S; Flag:L; ID:S):S;
var n:i;
 if Flag:
    ClearVariable(Раб.Договор.Buf);
    if ID="44ФЗ":
       Buf[1]="1 -- субъект малого предпринимательства";
       Buf[2]="2 -- учреждение и предприятие уголовно-исправительной системы";
       Buf[3]="3 -- организация инвалидов";
       Buf[4]="4 -- социально ориентированная некоммерческая организация";
      |ID="18Н":
       Buf[1]="10 -- учреждение и предприятие уголовно-исправительной системы";
       Buf[2]="20 -- организация инвалидов";
       Buf[3]="30 -- субъект малого предпринимательства";
       Buf[4]="31 -- поставщик (подрядчик, исполнитель), который в соответствии с контрактом обязан привлечь к исполнению контракта субподрядчиков, соисполнителей из числа субъектов малого предпринимательства";
       Buf[5]="40 -- социально ориентированная некоммерческая организация";
       Buf[6]="41 -- поставщик (подрядчик, исполнитель), который в соответствии с контрактом обязан привлечь к исполнению контракта субподрядчиков, соисполнителей из числа социально ориентированных некоммерческих организаций";
      |True:
       Buf[1]="1 -- субъект малого предпринимательства";
       Buf[2]="2 -- учреждение уголовно-исправительной системы";
       Buf[3]="3 -- общероссийские общественные организации инвалидов";
    fi;
    n=Alternate("Статус поставщика",Buf,-1,Int(Val),12);
    if not n=0:
       if ID="18Н":
          Val=SubStr(Buf[n],1,2);
         else
          Val=SubStr(Buf[n],1,1);
       fi;
    fi;
   else
    if ID="44ФЗ":
       if val="1": ^"субъект малого предпринимательства";
         |val="2": ^"учреждение и предприятие уголовно-исправительной системы";
         |val="3": ^"организация инвалидов";
         |val="4": ^"социально ориентированная некоммерческая организация";
       fi;
      |ID="18Н":
       if val="10": ^"учреждение и предприятие уголовно-исправительной системы";
         |val="20": ^"организация инвалидов";
         |val="30": ^"субъект малого предпринимательства";
         |val="31": ^"поставщик (подрядчик, исполнитель), который в соответствии с контрактом обязан привлечь к исполнению контракта субподрядчиков, соисполнителей из числа субъектов малого предпринимательства";
         |val="40": ^"социально ориентированная некоммерческая организация";
         |val="41": ^"поставщик (подрядчик, исполнитель), который в соответствии с контрактом обязан привлечь к исполнению контракта субподрядчиков, соисполнителей из числа социально ориентированных некоммерческих организаций";
       fi;
      |True:
       if val="1": ^"субъект малого предпринимательства";
         |val="2": ^"учреждение уголовно-исправительной системы";
         |val="3": ^"общероссийские общественные организации инвалидов";
       fi;
    fi;
 fi;
 ^Val;
end;

Func Секретность (Val:I; Flag:L):S;
var n:i;
 if Flag:
    ClearVariable(Раб.Договор.Buf);
    Buf[1]="0 -- Не секретно";
    Buf[2]="1 -- Для служебного пользования";
    Buf[3]="2 -- Секретно";
    Buf[4]="3 -- Совершенно секретно";
    Buf[5]="4 -- Особой важности";
    n=Alternate("Гриф секретности",Buf,-1,val+1,12);
    if n=0: ^Str(Val); fi;
    ^Str(n-1);
   else
    if val=0: ^"Не секретно";
      |val=1: ^"Для служебного пользования";
      |val=2: ^"Секретно";
      |val=3: ^"Совершенно секретно";
      |val=4: ^"Особой важности";
    fi;
 fi;
 ^Str(Val);
end;



Func НаименованиеБюджета (Val:S; Flag:L; ID:S):S;
var n:i;
 if Flag:
    ClearVariable(Раб.Договор.Buf);
    if ID="18Н":
       Buf[1]="11 -- федеральный бюджет";
       Buf[2]="14 -- бюджет Пенсионного фонда Российской Федерации";
       Buf[3]="15 -- бюджет Федерального фонда обязательного медицинского страхования";
       Buf[4]="16 -- бюджет Фонда социального страхования Российской Федерации";
      else
       Buf[1]="01 -- Федеральный бюджет";
       Buf[2]="02 -- бюджет субъекта Российской Федерации";
       Buf[3]="03 -- местный бюджет";
       Buf[4]="04 -- бюджет Пенсионного фонда Российской Федерации";
       Buf[5]="05 -- бюджет Фонда обязательного медицинского страхования Российской Федерации";
       Buf[6]="06 -- бюджет Фонда социального страхования Российской Федерации";
       Buf[7]="07 -- бюджет территориального государственного внебюджетного фонда";
    fi;
    n=Alternate("Код бюджета",Buf,-1,Int(val),12);
    if n=0: ^val; fi;
    ^SubStr(Buf[n],1,2);
   else
    if ID="18Н":
       if val="11": ^"федеральный бюджет";
         |val="14": ^"бюджет Пенсионного фонда Российской Федерации";
         |val="15": ^"бюджет Федерального фонда обязательного медицинского страхования";
         |val="16": ^"бюджет Фонда социального страхования Российской Федерации";
       fi;
      else
       if val="01": ^"Федеральный бюджет";
         |val="02": ^"бюджет субъекта Российской Федерации";
         |val="03": ^"местный бюджет";
         |val="04": ^"бюджет Пенсионного фонда Российской Федерации";
         |val="05": ^"бюджет Фонда обязательного медицинского страхования Российской Федерации";
         |val="06": ^"бюджет Фонда социального страхования Российской Федерации";
         |val="07": ^"бюджет территориального государственного внебюджетного фонда";
       fi;
    fi;
 fi;
 ^Val;
end;

Func ВидВнеБюджетныхСредств (Val:S; Flag:L; ID:S):S;
var n:i;
 if Flag:
    ClearVariable(Раб.Договор.Buf);
    if ID="44ФЗ":
       Buf[1]="18 -- субсидии";
       Buf[2]="19 -- средства бюджетных учреждений от приносящей доход деятельности";
       Buf[3]="20 -- гранты";
       Buf[4]="21 -- инвестиции";
       Buf[5]="22 -- иные источники финансового обеспечения";
      |ID="18Н":
       Buf[1]="21 -- средства федеральных бюджетных учреждений";
       Buf[2]="22 -- средства федеральных автономных учреждений";
       Buf[3]="23 -- средства федеральных государственных унитарных предприятий";
       Buf[4]="24 -- средства юридических лиц, не являющихся государственными или муниципальными учреждениями, государственными или муниципальными унитарными предприятиями";
      |true:
       Buf[1]="11 -- внебюджетные средства получателей средств федерального бюджета";
       Buf[2]="12 -- внебюджетные средства получателей средств бюджета субъекта Российской Федерации";
       Buf[3]="13 -- внебюджетные средства получателей средств местного бюджета";
       Buf[4]="14 -- внебюджетные средства Пенсионного фонда Российской Федерации";
       Buf[5]="15 -- внебюджетные средства Фонда обязательного медицинского страхования Российской Федерации";
       Buf[6]="16 -- внебюджетные средства социального страхования Российской Федерации";
       Buf[7]="17 -- внебюджетные средства территориального государственного внебюджетного фонда";
       Buf[8]="18 -- средства бюджетных учреждений";
    fi;
    n=Alternate("Вид внебюджетных средств",Buf,-1,Int(val)-10,12);
    if n=0: ^Val; fi;
    val=SubStr(Buf[n],1,2);
   else
    if ID="44ФЗ":
       if val="18": ^"субсидии";
         |val="19": ^"средства бюджетных учреждений от приносящей доход деятельности";
         |val="20": ^"гранты";
         |val="21": ^"инвестиции";
         |val="22": ^"иные источники финансового обеспечения";
       fi;
      |ID="18Н":
       if val="21": ^"средства федеральных бюджетных учреждений";
         |val="22": ^"средства федеральных автономных учреждений";
         |val="23": ^"средства федеральных государственных унитарных предприятий";
         |val="24": ^"средства юридических лиц, не являющихся государственными или муниципальными учреждениями, государственными или муниципальными унитарными предприятиями";
       fi;
      |True:
       if val="11": ^"внебюджетные средства получателей средств федерального бюджета";
         |val="12": ^"внебюджетные средства получателей средств бюджета субъекта Российской Федерации";
         |val="13": ^"внебюджетные средства получателей средств местного бюджета";
         |val="14": ^"внебюджетные средства Пенсионного фонда Российской Федерации";
         |val="15": ^"внебюджетные средства Фонда обязательного медицинского страхования Российской Федерации";
         |val="16": ^"внебюджетные средства социального страхования Российской Федерации";
         |val="17": ^"внебюджетные средства территориального государственного внебюджетного фонда";
         |val="18": ^"средства бюджетных учреждений";
       fi;
    fi;
 fi;
 ^Val;
end;

Func КонвРазмещЗаказ (sVal:S; sID:S; tID:S):S;
 if sID="1191":
    if tID="44ФЗ":
       if sVal="1": ^"1";
         |sVal="2": ^"12";
         |sVal="3": ^"7";
         |sVal="4": ^"9";
         |sVal="5": ^"13";
         |sVal="6": ^"11";
         |sVal="7": ^"11";
         |sVal="8": ^"";
         |sVal="9": ^"4";
         |sVal="10":^"8";
       fi;
      |not tID="1191":
       if sVal="1": ^"1";
         |sVal="2": ^"2";
         |sVal="3": ^"3";
         |sVal="4": ^"5";
         |sVal="5": ^"6";
         |sVal="6": ^"7";
         |sVal="7": ^"7";
         |sVal="8": ^"8";
         |sVal="9": ^"9";
         |sVal="10":^"10";
       fi;
    fi;
   else
    if tID="1191":
       if sVal="1": ^"1";
         |sVal="2": ^"2";
         |sVal="3": ^"3";
         |sVal="4": ^"";
         |sVal="5": ^"4";
         |sVal="6": ^"5";
         |sVal="7" and sID="491": ^"7";
         |sVal="7": ^"6";
         |sVal="8": ^"8";
         |sVal="9": ^"9";
         |sVal="10":^"10";
       fi;
      |tID="44ФЗ":
       if sVal="1": ^"1";
         |sVal="2": ^"12";
         |sVal="3": ^"7";
         |sVal="4": ^"9";
         |sVal="5": ^"13";
         |sVal="6": ^"11";
         |sVal="7": ^"11";
         |sVal="8": ^"";
         |sVal="9": ^"4";
         |sVal="10":^"8";
       fi;
    fi;
 fi;
 ^sVal;
end;

Func РазмещениеЗаказа10 (Val:S; Flag:L; ID:S):S;
var n:i;
 if Flag:
    ClearVariable(Раб.Договор.Buf);
    n=0;
    if ID="44ФЗ":
       n=n+1; Buf[n]='ст.83 ч.2 п.1 Заключения договора энергоснабжения или договора купли-продажи электрической энергии с гарантирующим поставщиком электрической энергии';
       n=n+1; Buf[n]='ст.83 ч.2 п.2 Заключения контракта на поставки спортивного инвентаря и оборудования, спортивной экипировки, необходимых для подготовки спортивных сборных команд Российской Федерации по олимпийским и паралимпийским видам спорта, а также для участия спо...';
       n=n+1; Buf[n]='ст.83 ч.2 п.3 Заключения федеральным органом исполнительной власти в соответствии с установленными Правительством Российской Федерации правилами контракта с иностранной организацией на лечение гражданина Российской Федерации за пределами территории Ро...';
       n=n+1; Buf[n]='ст.83 ч.2 п.4 Заключения контракта на оказание преподавательских услуг, а также услуг экскурсовода (гида) физическими лицами';
       n=n+1; Buf[n]='ст.83 ч.2 п.5 Осуществления закупок дипломатическими представительствами и консульскими учреждениями Российской Федерации, торговыми представительствами Российской Федерации, официальными представительствами Российской Федерации при международных орга...';
       n=n+1; Buf[n]='ст.83 ч.2 п.6 Осуществления закупки товара, работы или услуги, являющихся предметом контракта, расторжение которого осуществлено заказчиком на основании части 9 статьи 95 настоящего Федерального закона. При этом в случае, если до расторжения контракта...';
       n=n+1; Buf[n]='ст.83 ч.2 п.7 Осуществления закупок лекарственных препаратов, которые необходимы для назначения пациенту при наличии медицинских показаний (индивидуальная непереносимость, по жизненным показаниям) по решению врачебной комиссии, которое фиксируется в м...';
       n=n+1; Buf[n]='ст.83 ч.2 п.8 Признания повторного конкурса, электронного аукциона не состоявшимися в соответствии с частью 4 статьи 55 и частью 4 статьи 71 настоящего Федерального закона';
       n=n+1; Buf[n]='ст.83 ч.2 п.9 Осуществления закупок изделий народных художественных промыслов, образцы которых зарегистрированы в порядке, установленном уполномоченным Правительством Российской Федерации федеральным органом исполнительной власти';
       n=Alternate("Запрос предложений ",Buf,-1,1);
       if not n=0:
          val=val+".83_2_"+Str(n);
       fi;
    fi;
  else
   if ID="44ФЗ":
      if Match(Val,"10.83_2_?") or Match(Val,"11.83_2_??"):
         val="Запрос предложений(ст.83 ч.2 п."+Trim(SubStr(Val,9,2))+")";
      fi;
   fi;
 fi;
 ^Val;
end;

Func РазмещениеЗаказа11 (Val:S; Flag:L; ID:S):S;
var n:i;
 if Flag:
    ClearVariable(Раб.Договор.Buf);
    n=0;
    if ID="44ФЗ":
       n=n+1; Buf[n]='ст.93 ч.1 п.1  Осуществление закупки товара, работы или услуги, которые относятся к сфере деятельности субъектов естественных монополий в соответствии с Федеральным законом от 17 августа 1995 года N 147-ФЗ "О естественных монополиях"';
       n=n+1; Buf[n]='ст.93 ч.1 п.2  Осуществление закупки для государственных нужд у единственного поставщика (подрядчика, исполнителя), определенного указом или распоряжением Президента Российской Федерации, либо в случаях, установленных поручениями Президента Российской...';
       n=n+1; Buf[n]='ст.93 ч.1 п.3  Выполнение работы по мобилизационной подготовке в Российской Федерации';
       n=n+1; Buf[n]='ст.93 ч.1 п.4  Осуществление закупки товара, работы или услуги на сумму, не превышающую ста тысяч рублей. При этом совокупный годовой объем закупок, который заказчик вправе осуществить на основании настоящего пункта, не превышает пять процентов размера...';
       n=n+1; Buf[n]='ст.93 ч.1 п.5  Осуществление закупки товара, работы или услуги государственным или муниципальным образовательным учреждением, государственным или муниципальным учреждением культуры, уставными целями деятельности которых являются сохранение, использова...';
       n=n+1; Buf[n]='ст.93 ч.1 п.6  Возникновение потребности в работе или услуге, выполнение или оказание которых может осуществляться только органом исполнительной власти в соответствии с его полномочиями либо подведомственными ему государственным учреждением, государств...';
       n=n+1; Buf[n]='ст.93 ч.1 п.7  Заключение контракта на поставку российских вооружения и военной техники, которые не имеют российских аналогов и производство которых осуществляется единственным производителем, с поставщиком таких вооружения и военной техники, включенны...';
       n=n+1; Buf[n]='ст.93 ч.1 п.8  Оказание услуг по водоснабжению, водоотведению, теплоснабжению, газоснабжению (за исключением услуг по реализации сжиженного газа), по подключению (присоединению) к сетям инженерно-технического обеспечения по регулируемым в соответствии...';
       n=n+1; Buf[n]='ст.93 ч.1 п.9  Возникновение потребности в определенных товарах, работах, услугах вследствие аварии, иных чрезвычайных ситуаций природного или техногенного характера, непреодолимой силы, возникновение необходимости срочного медицинского вмешательства...';
       n=n+1; Buf[n]='ст.93 ч.1 п.10 Поставка культурных ценностей (в том числе музейных предметов и музейных коллекций, редких и ценных изданий, рукописей, архивных документов (включая их копии), имеющих историческое, художественное или иное культурное значение), предназна...';
       n=n+1; Buf[n]='ст.93 ч.1 п.11 Производство товара, выполнение работы, оказание услуги осуществляются учреждением и предприятием уголовно-исполнительной системы в соответствии с перечнем товаров, работ, услуг, утвержденным Правительством Российской Федерации';
       n=n+1; Buf[n]='ст.93 ч.1 п.12 Заключение учреждением, исполняющим наказания, контракта на поставку товара для государственных нужд при приобретении указанным учреждением сырья, материалов, комплектующих изделий для производства товара, выполнения работы, оказания усл...';
       n=n+1; Buf[n]='ст.93 ч.1 п.13 Закупка произведений литературы и искусства определенных авторов (за исключением случаев приобретения кинопроектов в целях проката), исполнений конкретных исполнителей, фонограмм конкретных изготовителей для нужд заказчиков в случае, есл...';
       n=n+1; Buf[n]='ст.93 ч.1 п.14 Закупка печатных изданий или электронных изданий определенных авторов у издателей таких изданий в случае, если указанным издателям принадлежат исключительные права или исключительные лицензии на использование таких изданий, а также оказа...';
       n=n+1; Buf[n]='ст.93 ч.1 п.15 Заключение контракта на посещение зоопарка, театра, кинотеатра, концерта, цирка, музея, выставки или спортивного мероприятия';
       n=n+1; Buf[n]='ст.93 ч.1 п.16 Заключение контракта на оказание услуг по участию в мероприятии, проводимом для нужд нескольких заказчиков, с поставщиком (подрядчиком, исполнителем), который определен заказчиком, являющимся организатором такого мероприятия, в порядке...';
       n=n+1; Buf[n]='ст.93 ч.1 п.17 Заключение контракта театром, учреждением, осуществляющим концертную или театральную деятельность, в том числе концертным коллективом (танцевальным коллективом, хоровым коллективом, оркестром, ансамблем), телерадиовещательным учреждением...';
       n=n+1; Buf[n]='ст.93 ч.1 п.18 Заключение контракта на оказание услуг по реализации входных билетов и абонементов на посещение театрально-зрелищных, культурно-просветительных и зрелищно-развлекательных мероприятий, экскурсионных билетов и экскурсионных путевок - блан...';
       n=n+1; Buf[n]='ст.93 ч.1 п.19 Заключение контракта на оказание услуг по осуществлению авторского контроля за разработкой проектной документации объекта капитального строительства, проведению авторского надзора за строительством, реконструкцией, капитальным ремонтом о...';
       n=n+1; Buf[n]='ст.93 ч.1 п.20 Заключение контрактов на оказание услуг, связанных с обеспечением визитов глав иностранных государств, глав правительств иностранных государств, руководителей международных организаций, парламентских делегаций, правительственных делегац...';
       n=n+1; Buf[n]='ст.93 ч.1 п.21 Заключение контрактов на поставки товара, выполнение работ, оказание услуг для обеспечения деятельности объектов государственной охраны, в том числе обеспечения выездных мероприятий, проводимых Президентом Российской Федерации, палатами ...';
       n=n+1; Buf[n]='ст.93 ч.1 п.22 Заключение контракта управления многоквартирным домом на основании решения общего собрания собственников помещений в многоквартирном доме или открытого конкурса, проводимого органом местного самоуправления в соответствии с жилищным закон...';
       n=n+1; Buf[n]='ст.93 ч.1 п.23 Заключение контракта на оказание услуг по содержанию и ремонту одного или нескольких нежилых помещений, переданных в безвозмездное пользование или оперативное управление заказчику, в случае, если данные услуги оказываются другому лицу ил...';
       n=n+1; Buf[n]='ст.93 ч.1 п.24 Признание несостоявшимся определения поставщика (подрядчика, исполнителя) закрытым способом и принятие заказчиком в соответствии с положениями части 9 статьи 89 и статьи 92 настоящего Федерального закона по согласованию с уполномоченным...';
       n=n+1; Buf[n]='ст.93 ч.1 п.25 Признание несостоявшимися открытого конкурса, конкурса с ограниченным участием, двухэтапного конкурса, повторного конкурса, электронного аукциона, запроса котировок, запроса предложений и принятие заказчиком в соответствии с частями 1 и...';
       n=n+1; Buf[n]='ст.93 ч.1 п.26 Заключение контракта на оказание услуг, связанных с направлением работника в служебную командировку, а также с участием в проведении фестивалей, концертов, представлений и подобных культурных мероприятий (в том числе гастролей) на основа...';
       n=n+1; Buf[n]='ст.93 ч.1 п.27 Заключение контракта на оказание услуг адвоката в связи с назначением адвоката органом дознания, органом предварительного следствия, судом для участия в качестве защитника в уголовном судопроизводстве в соответствии с Уголовно-процессуал...';
       n=n+1; Buf[n]='ст.93 ч.1 п.28 Осуществление закупок лекарственных препаратов, которые предназначены для назначения пациенту при наличии медицинских показаний (индивидуальная непереносимость, по жизненным показаниям) по решению врачебной комиссии, которое отражается в...';
       n=Alternate("Закупка у единственного поставщика (подрядчика, исполнителя) ",Buf,-1,1);
       if not n=0:
          val=val+".93_1_"+Str(n);
       fi;
    fi;
  else
   if ID="44ФЗ":
      if Match(Val,"11.93_1_?") or Match(Val,"11.93_1_??"):
         val="Закупка у единственного поставщика (подрядчика, исполнителя)(ст.93 ч.1 п."+Trim(SubStr(Val,9,2))+")";
      fi;
   fi;
 fi;
 ^Val;
end;

Func РазмещениеЗаказа (Val:S; Flag:L; ID:S):S;
var Ret:S;
var n:i;
 if Flag:
    ClearVariable(Раб.Договор.Buf);
    if ID="":
       Buf[1 ]="Закупка малого объема";
       Buf[2 ]="1 -- Открытый конкурс";
       Buf[3 ]="2 -- Открытый аукцион";
       Buf[4 ]="3 -- Открытый аукцион в электронной форме";
       Buf[5 ]="4 -- Запрос котировок";
       Buf[6 ]="5 -- Предварительный отбор и запрос котировок при чрезвычайных ситуациях";
       Buf[7 ]="6 -- Единственный поставщик (исполнитель, подрядчик)";
       Buf[8 ]="7 -- Единственный поставщик (исполнитель, подрядчик)";
       Buf[9 ]="8 -- Изменение контракта";
       Buf[10]="9 -- Закрытый конкурс";
       Buf[11]="10 --Закрытый аукцион";
       n=Int(Val)+1;
      |ID="1191":
       Buf[1]="1 -- Открытый конкурс";
       Buf[2]="2 -- Открытый аукцион";
       Buf[3]="3 -- Открытый аукцион в электронной форме";
       Buf[4]="4 -- Запрос котировок";
       Buf[5]="5 -- Предварительный отбор и запрос котировок при чрезвычайных ситуациях";
       Buf[6]="6 -- Единственный поставщик (исполнитель, подрядчик)";
       n=Int(Val);
      |ID="491":
       Buf[1]="7 -- Единственный поставщик (исполнитель, подрядчик)";
       Buf[2]="8 -- Изменение контракта";
       Buf[3]="9 -- Закрытый конкурс";
       Buf[4]="10 -- Закрытый аукцион";
       n=Int(Val)-6;
      |ID="44ФЗ":
       Buf[1] ="Закупка на сумму, не превышающую ста тысяч рублей (п.4 ч.1 ст.93 ФЗ N 44-ФЗ)(=11)";
       Buf[2] ="1 Открытый конкурс";
       Buf[3] ="2 Конкурс с ограниченным участием";
       Buf[4] ="3 Двухэтапный конкурс";
       Buf[5] ="4 Закрытый конкурс";
       Buf[6] ="5 Закрытый конкурс с ограниченным участием";
       Buf[7] ="6 Закрытый двухэтапный конкурс";
       Buf[8] ="7 Аукцион в электронной форме";
       Buf[9] ="8 Закрытый аукцион";
       Buf[10]="9 Запрос котировок";
       Buf[11]="10 Запрос предложений";
       Buf[12]="11 Закупка у единственного поставщика (подрядчика, исполнителя)";
       Buf[13]="12 Открытый аукцион";
       Buf[14]="13 Предварительный отбор и запрос котировок при чрезвычайных ситуациях";
    fi;
    n=Alternate("Способ размещения заказа",Buf,-1,n+1,12);
    if n=0: ^Val; fi;
    if ID="":
       ^Str(n-1);
      |ID="1191":
       ^Str(n);
      |ID="491":
       ^Str(n+6);
      |ID="44ФЗ":
       if n-1=10:
          Ret=РазмещениеЗаказа10("10",Flag,ID);
          ^Ret;
         |n-1=11:
          Ret=РазмещениеЗаказа11("11",Flag,ID);
          ^Ret;
       fi;
       ^Str(n-1);
    fi;
   else
    if ID="":
       if Val="0": ^"Закупка малого объема";
         |Val="1": ^"Открытый конкурс - 1";
         |Val="2": ^"Открытый аукцион - 2";
         |Val="3": ^"Открытый аукцион в электронной форме - 3";
         |Val="4": ^"Запрос котировок - 4";
         |Val="5": ^"Предварительный отбор и запрос котировок при чрезвычайных ситуациях - 5";
         |Val="6": ^"Единственный поставщик (исполнитель, подрядчик) - 6";
         |Val="7": ^"Единственный поставщик (исполнитель, подрядчик) - 7";
         |Val="8": ^"Изменение контракта - 8";
         |Val="9": ^"Закрытый конкурс - 9";
         |Val="10":^"Закрытый аукцион - 10";
       fi;
      |ID="1191":
       if Val="0": ^"Закупка малого объема";
         |Val="1": ^"Открытый конкурс - 1";
         |Val="2": ^"Открытый аукцион - 2";
         |Val="3": ^"Открытый аукцион в электронной форме - 3";
         |Val="4": ^"Запрос котировок - 4";
         |Val="5": ^"Предварительный отбор и запрос котировок при чрезвычайных ситуациях - 5";
         |Val="6": ^"Единственный поставщик (исполнитель, подрядчик) - 6";
       fi;
      |ID="491":
       if Val="7": ^"Единственный поставщик (исполнитель, подрядчик) - 7";
         |Val="8": ^"Изменение контракта - 8";
         |Val="9": ^"Закрытый конкурс - 9";
         |Val="10":^"Закрытый аукцион - 10";
       fi;
      |ID="44ФЗ":
       if Val="0":  ^"Закупка на сумму, не превышающую ста тысяч рублей";
         |Val="1":  ^"Открытый конкурс";
         |Val="2":  ^"Конкурс с ограниченным участием";
         |Val="3":  ^"Двухэтапный конкурс";
         |Val="4":  ^"Закрытый конкурс";
         |Val="5":  ^"Закрытый конкурс с ограниченным участием";
         |Val="6":  ^"Закрытый двухэтапный конкурс";
         |Val="7":  ^"Аукцион в электронной форме";
         |Val="8":  ^"Закрытый аукцион";
         |Val="9":  ^"Запрос котировок";
         |Val="10": ^"Запрос предложений";
         |Match(Val,"10.*"): ^РазмещениеЗаказа10(Val,Flag,ID);
         |Val="11": ^"Закупка у единственного поставщика (подрядчика, исполнителя)";
         |Match(Val,"11.*"): ^РазмещениеЗаказа11(Val,Flag,ID);
         |Val="12": ^"Открытый аукцион";
         |Val="13": ^"Предварительный отбор и запрос котировок при чрезвычайных ситуациях";
       fi;
    fi;
 fi;
 ^Val;
end;

Func РазмещениеЗаказа491 (Val:S; Flag:L):S;
var n:i;
 if Flag:
    ClearVariable(Раб.Договор.Buf);
    Buf[1]="7 -- Единственный поставщик (исполнитель, подрядчик)";
    Buf[2]="8 -- Изменение контракта";
    Buf[3]="9 -- Закрытый конкурс";
    Buf[4]="10 -- Закрытый аукцион";
    n=Int(Val)-6;
    n=Alternate("Способ размещения заказа",Buf,-1,n,12);
    if n=0: ^Val; fi;
    ^Str(n+6);
   else
    if Val="7": ^"Единственный поставщик (исполнитель, подрядчик)";
      |Val="8": ^"Изменение контракта";
      |Val="9": ^"Закрытый конкурс";
      |Val="10":^"Закрытый аукцион";
    fi;
 fi;
 ^Val;
end;

Func СОП (Val:S; Flag:L; ID:S):S;
var n,nn:i;
 if Flag:
    ClearVariable(Раб.Договор.Buf);
    if ID="18Н":
       n=n+1; Buf[n]="11042 --закрытый конкурс";
       n=n+1; Buf[n]="11052 --закрытый конкурс с ограниченным участием";
       n=n+1; Buf[n]="11062 --закрытый двухэтапный конкурс";
       n=n+1; Buf[n]="12022 --закрытый аукцион";
      |ID="136Н":
       n=n+1; Buf[n]="0     --Закупка на сумму, не превышающую ста тысяч рублей (п.4 ч.1 ст.93 ФЗ N 44-ФЗ)(=20000)";
       n=n+1; Buf[n]="11011 --открытый конкурс";
       n=n+1; Buf[n]="11021 --конкурс с ограниченным участием";
       n=n+1; Buf[n]="11031 --двухэтапный конкурс";
       n=n+1; Buf[n]="12011 --аукцион в электронной форме";
       n=n+1; Buf[n]="13011 --запрос котировок";
       n=n+1; Buf[n]="14011 --запрос предложений";
    fi;
    n=n+1; Buf[n]="20010 --закупка товара, работы или услуги, которые относятся к сфере деятельности субъектов естественных монополий в соответствии с Федеральным законом от 17 августа 1995 года № 147-ФЗ О естественных монополиях» (Собрание законодательства Российской Федерации, 1995, № 34, ст. 3426), а также услуг центрального депозитария";
    n=n+1; Buf[n]="20020 --осуществление закупки для государственных нужд у единственного поставщика (подрядчика, исполнителя), определенного указом или распоряжением Президента Российской Федерации, либо в случаях, установленных поручениями Президента Российской Федерации, у поставщика (подрядчика, исполнителя), определенного постановлением или распоряжением Правительства Российской Федерации";
    n=n+1; Buf[n]="20030 --закупка на выполнение работы по мобилизационной подготовке в Российской Федерации";
    n=n+1; Buf[n]="20040 --закупка работы или услуги, выполнение или оказание которых может осуществляться только органом исполнительной власти в соответствии с его полномочиями либо подведомственными ему государственным учреждением, государственным унитарным предприятием, соответствующие полномочия которых устанавливаются федеральными законами, нормативными правовыми актами Президента Российской Федерации или нормативными правовыми актами Правительства Российской Федерации, законодательными актами соответствующего субъекта Российской Федерации";
    n=n+1; Buf[n]="20050 --заключение контракта на поставку российских вооружения и военной техники, которые не имеют российских аналогов и производство которых осуществляется единственным производителем, с поставщиком таких вооружения и военной техники, включенным в реестр единственных поставщиков таких вооружения и военной техники";
    n=n+1; Buf[n]="20060 --закупка оказания услуг по водоснабжению, водоотведению, теплоснабжению, газоснабжению (за исключением услуг по реализации сжиженного газа), по подключению (присоединению) к сетям инженерно-технического обеспечения по регулируемым в соответствии с законодательством Российской Федерации ценам (тарифам), по хранению и ввозу (вывозу) наркотических средств и психотропных веществ";
    n=n+1; Buf[n]="20070 --закупка определенных товаров, работ, услуг вследствие аварии, иных чрезвычайных ситуаций природного или техногенного характера, непреодолимой силы, в случае возникновения необходимости в оказании медицинской помощи в экстренной форме либо в оказании медицинской помощи в неотложной форме, в том числе при заключении федеральным органом исполнительной власти контракта с иностранной организацией на лечение гражданина Российской Федерации за пределами территории Российской Федерации (при условии, что такие товары, работы, услуги не включены в утвержденный Правительством Российской Федерации перечень товаров, работ, услуг, необходимых для оказания гуманитарной помощи либо ликвидации последствий чрезвычайных ситуаций природного или техногенного характера) и применение иных способов определения поставщика (подрядчика, исполнителя), требующих затрат времени, нецелесообразно";
    n=n+1; Buf[n]="20080 --поставка культурных ценностей (в том числе музейных предметов и музейных коллекций, редких и ценных изданий, рукописей, архивных документов (включая их копии), имеющих историческое, художественное или иное культурное значение), предназначенных для пополнения государственных музейного, библиотечного, архивного фондов, кино-, фотофонда и аналогичных фондов";
    n=n+1; Buf[n]="20090 --закупка товаров, работ, услуг производство, выполнение, оказание которых осуществляются учреждением и предприятием уголовно-исполнительной системы в соответствии с перечнем товаров, работ, услуг, утвержденным Правительством Российской Федерации";
    n=n+1; Buf[n]="20100 --закупка учреждением, исполняющим наказания, товара для государственных нужд при приобретении указанным учреждением сырья, материалов, комплектующих изделий для производства товара, выполнения работы, оказания услуги в целях трудоустройства осужденных на основании договоров, заключенных с юридическими лицами, при условии, что приобретение указанным учреждением таких сырья, материалов, комплектующих изделий осуществляется за счет средств, предусмотренных этими договорами";
    n=n+1; Buf[n]="20110 --закупка произведений литературы и искусства определенных авторов (за исключением случаев приобретения кинопроектов в целях проката), исполнений конкретных исполнителей, фонограмм конкретных изготовителей для нужд заказчиков в случае, если единственному лицу принадлежат исключительные права или исключительные лицензии на такие произведения, исполнения, фонограммы";
    n=n+1; Buf[n]="20120 --закупка печатных изданий или электронных изданий (в том числе используемых в них программно-технических средств и средств защиты информации) определенных авторов у издателей таких изданий в случае, если указанным издателям принадлежат исключительные права или исключительные лицензии на использование таких изданий, а также оказание услуг по предоставлению доступа к таким электронным изданиям для обеспечения деятельности государственных и муниципальных образовательных учреждений, государственных и муниципальных библиотек, государственных научных организаций";
    n=n+1; Buf[n]="20130 --закупка услуги по посещению зоопарка, театра, кинотеатра, концерта, цирка, музея, выставки или спортивного мероприятия";
    n=n+1; Buf[n]="20140 --закупка услуги по участию в мероприятии, проводимом для нужд нескольких заказчиков, поставщиком (подрядчиком, исполнителем), который определен заказчиком, являющимся организатором такого мероприятия, в порядке, установленном Федеральным законом № 44-ФЗ";
    n=n+1; Buf[n]="20150 --закупка театром, учреждением, осуществляющим концертную или театральную деятельность, в том числе концертным коллективом (танцевальным коллективом, хоровым коллективом, оркестром, ансамблем), телерадиовещательным учреждением, цирком, музеем, домом культуры, дворцом культуры, клубом, образовательным учреждением, зоопарком, планетарием, парком культуры и отдыха, заповедником, ботаническим садом, национальным парком, природным парком или ландшафтным парком, услуг (работ) на создание произведения литературы или искусства конкретным физическим лицом, на исполнение конкретным физическим лицом или конкретным юридическим лицом, осуществляющими концертную или театральную деятельность, в том числе концертным коллективом (танцевальным коллективом, хоровым коллективом, оркестром, ансамблем), либо на изготовление и поставку декораций, сценической мебели, сценических костюмов (в том числе головных уборов и обуви) и необходимых для создания декораций и костюмов материалов, а также театрального реквизита, бутафории, грима, постижерских изделий, театральных кукол, необходимых для создания и (или) исполнения произведений конкретным физическим или юридическим лицом";
    n=n+1; Buf[n]="20160 --закупка услуг по реализации входных билетов и абонементов на посещение театрально-зрелищных, культурно-просветительных и зрелищно-развлекательных мероприятий, экскурсионных билетов и экскурсионных путевок - бланков строгой отчетности";
    n=n+1; Buf[n]="20170 --закупка услуг по осуществлению авторского контроля за разработкой проектной документации объекта капитального строительства, проведению авторского надзора за строительством, реконструкцией, капитальным ремонтом объекта капитального строительства соответствующими авторами, на проведение технического и авторского надзора за выполнением работ по сохранению объекта культурного наследия (памятников истории и культуры) народов Российской Федерации авторами проектов";
    n=n+1; Buf[n]="20180 --закупка услуг, связанных с обеспечением визитов глав иностранных государств, глав правительств иностранных государств, руководителей международных организаций, парламентских делегаций, правительственных делегаций, делегаций иностранных государств (гостиничное, транспортное обслуживание, эксплуатация компьютерного оборудования, оргтехники, звукотехнического оборудования (в том числе для обеспечения синхронного перевода), обеспечение питания)";
    n=n+1; Buf[n]="20190 --закупка товаров, работ, услуг для обеспечения деятельности объектов государственной охраны, в том числе обеспечения выездных мероприятий, проводимых Президентом Российской Федерации, палатами Федерального Собрания Российской Федерации, Правительством Российской Федерации (бытовое, гостиничное, транспортное обслуживание, эксплуатация компьютерного оборудования, оргтехники, звукотехнического оборудования (в том числе для обеспечения синхронного перевода), обеспечение санитарно-эпидемиологического благополучия, предоставление питания (включая безопасное питание)";
    n=n+1; Buf[n]="20200 --закупка услуг по управлению многоквартирным домом на основании решения общего собрания собственников помещений в многоквартирном доме или открытого конкурса, проводимого органом местного самоуправления в соответствии с жилищным законодательством, управляющей компанией, если помещения в многоквартирном доме находятся в частной, государственной или муниципальной собственности";
    n=n+1; Buf[n]="20210 --закупка услуг по содержанию и ремонту одного или нескольких нежилых помещений, переданных в безвозмездное пользование или оперативное управление заказчику, в случае, если данные услуги оказываются другому лицу или другим лицам, пользующимся нежилыми помещениями, находящимися в здании, в котором расположены помещения, переданные заказчику в безвозмездное пользование или оперативное управление";
    n=n+1; Buf[n]="20220 --закупка в связи с признанием определения поставщика (подрядчика, исполнителя) закрытым способом несостоявшимся и принятие заказчиком решения о заключении контракта с единственным поставщиком (подрядчиком, исполнителем) в соответствии с положениями части 9 статьи 89 и статьи 92 Федерального закона № 44-ФЗ по согласованию с уполномоченным Правительством Российской Федерации на осуществление данных функций федеральным органом исполнительной власти";
    n=n+1; Buf[n]="20300 --закупка услуг, связанных с направлением работника в служебную командировку, а также с участием в проведении фестивалей, концертов, представлений и подобных культурных мероприятий (в том числе гастролей) на основании приглашений на посещение указанных мероприятий";
    n=n+1; Buf[n]="20310 --закупка лекарственных препаратов, которые предназначены для назначения пациенту при наличии медицинских показаний (индивидуальная непереносимость, по жизненным показаниям) по решению врачебной комиссии, которое отражается в медицинских документах пациента и журнале врачебной комиссии";
    n=n+1; Buf[n]="20320 --закупка по договору энергоснабжения или договору купли-продажи электрической энергии с гарантирующим поставщиком электрической энергии";
    n=n+1; Buf[n]="20330 --закупка бюллетеней, открепительных удостоверений, специальных знаков (марок), используемых при проведении выборов в федеральные органы государственной власти, выборов в органы государственной власти субъектов Российской Федерации, референдума Российской Федерации и референдумов субъектов Российской Федерации, а также при проведении выборов в органы местного самоуправления и местных референдумов в муниципальных образованиях, являющихся административными центрами (столицами) субъектов Российской Федерации, за исключением случаев, установленных пунктом 6 части 2 статьи 1 Федерального закона № 44-ФЗ, у поставщика, определенного распоряжением Правительства Российской Федерации по предложениям высших исполнительных органов государственной власти субъектов Российской Федерации, Центральной избирательной комиссии";
    n=n+1; Buf[n]="20340 --закупка для обеспечения федеральных нужд нежилого здания, строения, сооружения, нежилого помещения, определенных в соответствии с решением о подготовке и реализации бюджетных инвестиций или о предоставлении субсидий на осуществление капитальных вложений в целях приобретения объектов недвижимого имущества в государственную или муниципальную собственность, принятым в порядке, установленном Правительством Российской Федерации";
    n=n+1; Buf[n]="20350 --аренда нежилого здания, строения, сооружения, нежилого помещения для обеспечения федеральных нужд, а также аренда жилых помещений, находящихся на территории иностранного государства заказчиками, осуществляющими свою деятельность на территории иностранного государства";
    n=n+1; Buf[n]="20360 --закупка преподавательских услуг, а также услуг экскурсовода (гида), оказываемых физическими лицами";
    n=n+1; Buf[n]="20370 --заключение федеральным органом исполнительной власти контракта с иностранной организацией на лечение гражданина Российской Федерации за пределами территории Российской Федерации в случае, если запрос предложений, проведенный в соответствии с пунктом 3 части 2 статьи 83 Федерального закона № 44-ФЗ, признан не состоявшимся в соответствии с частью 19 указанной статьи";
    n=n+1; Buf[n]="20380 --заключение организациями, осуществляющими образовательную деятельность и признанными в соответствии с законодательством об образовании федеральными или региональными инновационными площадками, контрактов на поставки оборудования (в том числе его техническую эксплуатацию), программного обеспечения, необходимых для внедрения научно-технических результатов и результатов интеллектуальной деятельности, с обладателем исключительных прав на такие оборудование и программное обеспечение за счет средств, выделенных на развитие инновационной инфраструктуры в системе образования";
    n=n+1; Buf[n]="20390 --заключение бюджетным учреждением контракта, предметом которого является выдача банковской гарантии";
    n=n+1; Buf[n]="20400 --осуществление закупок изделий народных художественных промыслов признанного художественного достоинства, образцы которых зарегистрированы в порядке, установленном уполномоченным Правительством Российской Федерации федеральным органом исполнительной власти";
    n=n+1; Buf[n]="20410 --заключение органами исполнительной власти, органами местного самоуправления контрактов на приобретение жилых помещений, соответствующих условиям отнесения к жилью экономического класса, установленным уполномоченным федеральным органом исполнительной власти, с юридическим лицом, заключившим в соответствии с Градостроительным кодексом Российской Федерации договор об освоении территории в целях строительства жилья экономического класса или договор о комплексном освоении территории в целях строительства жилья экономического класса, по цене и в сроки, которые определены договором об освоении территории в целях строительства жилья экономического класса или договором о комплексном освоении территории в целях строительства жилья экономического класса, при условии, что договором об освоении территории в целях строительства жилья экономического класса или договором о комплексном освоении территории в целях строительства жилья экономического класса предусмотрено заключение государственных и (или) муниципальных контрактов";
    n=n+1; Buf[n]="20420 --заключение органами исполнительной власти, органами местного самоуправления контрактов на приобретение жилых помещений, соответствующих условиям отнесения к жилью экономического класса, установленным уполномоченным федеральным органом исполнительной власти, с лицом, заключившим в порядке и на условиях, которые предусмотрены ФЗ от 24 июля 2008 года № 161-ФЗ 'О содействии развитию жилищного строительства», договор безвозмездного срочного пользования земельным участком для строительства жилья экономического класса, в том числе для его комплексного освоения в целях строительства такого жилья, договор аренды земельного участка для строительства жилья экономического класса, в том числе для его комплексного освоения в целях строительства такого жилья, либо договор аренды земельного участка для строительства в минимально требуемом объеме жилья экономического класса, в том числе для его комплексного освоения в целях строительства в минимально требуемом объеме жилья экономического класса и иного жилищного строительства, по цене и в сроки, которые определены любым из этих договоров, при условии, что им предусмотрено заключение государственных и (или) муниципальных контрактов";
    n=n+1; Buf[n]="20430 --осуществление закупок товаров, работ, услуг в целях обеспечения органов внешней разведки РФ средствами разведывательной деятельности в соответствии с перечнем товаров, работ, услуг, утвержденным руководителем соответствующего органа внешней разведки РФ";
    n=n+1; Buf[n]="20440 --осуществление закупок товаров, работ, услуг в целях обеспечения органов федеральной службы безопасности средствами контрразведывательной деятельности и борьбы с терроризмом в соответствии с перечнем товаров, работ, услуг, утвержденным руководителем федерального органа исполнительной власти в области обеспечения безопасности";
    n=n+1; Buf[n]="20450 --осуществление субъектами РФ за счет субсидий, предоставленных из федерального бюджета в соответствии со статьей 24.5 ФЗ от 24 июня 1998 года № 89-ФЗ 'Об отходах производства и потребления, закупки работ или услуг по выполнению инженерных изысканий, подготовке проектной документации для строительства объектов, используемых для обработки, утилизации отходов, объектов обезвреживания отходов, строительству и оснащению таких объектов у организаций, включенных в перечень, утвержденный Правительством Российской Федерации";
    n=n+1; Buf[n]="30000 --способ определения поставщика (подрядчика, исполнителя), установленный Правительством Российской Федерации в соответствии со статьей 111 Федерального закона № 44-ФЗ";
    nn=n;
    for n=1..nn do
     if Val=SubStr(Buf[n],1,5):
        Break;
     fi;
    od;
    if n>nn: n=1; fi;
    n=Alternate("Способ определения поставщика",Buf,-1,n);
    if n=0:
       Val="";
      else
       Val=Trim(SubStr(Buf[n],1,5));
    fi;
   else
    if Val="11011": Val="открытый конкурс";
      |Val="11021": Val="конкурс с ограниченным участием";
      |Val="11031": Val="двухэтапный конкурс";
      |Val="11042": Val="закрытый конкурс";
      |Val="11052": Val="закрытый конкурс с ограниченным участием";
      |Val="11062": Val="закрытый двухэтапный конкурс";
      |Val="12011": Val="аукцион в электронной форме";
      |Val="12022": Val="закрытый аукцион";
      |Val="13011": Val="запрос котировок";
      |Val="14011": Val="запрос предложений";
      |Val="20000": Val="закупка у единственного поставщика (подрядчика, исполнителя)";
      |Val="20010": Val="закупка товара, работы или услуги, которые относятся к сфере деятельности субъектов естественных монополий в соответствии с Федеральным законом от 17 августа 1995 года № 147-ФЗ О естественных монополиях» (Собрание законодательства Российской Федерации, 1995, № 34, ст. 3426), а также услуг центрального депозитария";
      |Val="20020": Val="осуществление закупки для государственных нужд у единственного поставщика (подрядчика, исполнителя), определенного указом или распоряжением Президента Российской Федерации, либо в случаях, установленных поручениями Президента Российской Федерации, у поставщика (подрядчика, исполнителя), определенного постановлением или распоряжением Правительства Российской Федерации";
      |Val="20030": Val="закупка на выполнение работы по мобилизационной подготовке в Российской Федерации";
      |Val="20040": Val="закупка работы или услуги, выполнение или оказание которых может осуществляться только органом исполнительной власти в соответствии с его полномочиями либо подведомственными ему государственным учреждением, государственным унитарным предприятием, соответствующие полномочия которых устанавливаются федеральными законами, нормативными правовыми актами Президента Российской Федерации или нормативными правовыми актами Правительства Российской Федерации, законодательными актами соответствующего субъекта Российской Федерации";
      |Val="20050": Val="заключение контракта на поставку российских вооружения и военной техники, которые не имеют российских аналогов и производство которых осуществляется единственным производителем, с поставщиком таких вооружения и военной техники, включенным в реестр единственных поставщиков таких вооружения и военной техники";
      |Val="20060": Val="закупка оказания услуг по водоснабжению, водоотведению, теплоснабжению, газоснабжению (за исключением услуг по реализации сжиженного газа), по подключению (присоединению) к сетям инженерно-технического обеспечения по регулируемым в соответствии с законодательством Российской Федерации ценам (тарифам), по хранению и ввозу (вывозу) наркотических средств и психотропных веществ";
      |Val="20070": Val="закупка определенных товаров, работ, услуг вследствие аварии, иных чрезвычайных ситуаций природного или техногенного характера, непреодолимой силы, в случае возникновения необходимости в оказании медицинской помощи в экстренной форме либо в оказании медицинской помощи в неотложной форме, в том числе при заключении федеральным органом исполнительной власти контракта с иностранной организацией на лечение гражданина Российской Федерации за пределами территории Российской Федерации (при условии, что такие товары, работы, услуги не включены в утвержденный Правительством Российской Федерации перечень товаров, работ, услуг, необходимых для оказания гуманитарной помощи либо ликвидации последствий чрезвычайных ситуаций природного или техногенного характера) и применение иных способов определения поставщика (подрядчика, исполнителя), требующих затрат времени, нецелесообразно";
      |Val="20080": Val="поставка культурных ценностей (в том числе музейных предметов и музейных коллекций, редких и ценных изданий, рукописей, архивных документов (включая их копии), имеющих историческое, художественное или иное культурное значение), предназначенных для пополнения государственных музейного, библиотечного, архивного фондов, кино-, фотофонда и аналогичных фондов";
      |Val="20090": Val="закупка товаров, работ, услуг производство, выполнение, оказание которых осуществляются учреждением и предприятием уголовно-исполнительной системы в соответствии с перечнем товаров, работ, услуг, утвержденным Правительством Российской Федерации";
      |Val="20100": Val="закупка учреждением, исполняющим наказания, товара для государственных нужд при приобретении указанным учреждением сырья, материалов, комплектующих изделий для производства товара, выполнения работы, оказания услуги в целях трудоустройства осужденных на основании договоров, заключенных с юридическими лицами, при условии, что приобретение указанным учреждением таких сырья, материалов, комплектующих изделий осуществляется за счет средств, предусмотренных этими договорами";
      |Val="20110": Val="закупка произведений литературы и искусства определенных авторов (за исключением случаев приобретения кинопроектов в целях проката), исполнений конкретных исполнителей, фонограмм конкретных изготовителей для нужд заказчиков в случае, если единственному лицу принадлежат исключительные права или исключительные лицензии на такие произведения, исполнения, фонограммы";
      |Val="20120": Val="закупка печатных изданий или электронных изданий (в том числе используемых в них программно-технических средств и средств защиты информации) определенных авторов у издателей таких изданий в случае, если указанным издателям принадлежат исключительные права или исключительные лицензии на использование таких изданий, а также оказание услуг по предоставлению доступа к таким электронным изданиям для обеспечения деятельности государственных и муниципальных образовательных учреждений, государственных и муниципальных библиотек, государственных научных организаций";
      |Val="20130": Val="закупка услуги по посещению зоопарка, театра, кинотеатра, концерта, цирка, музея, выставки или спортивного мероприятия";
      |Val="20140": Val="закупка услуги по участию в мероприятии, проводимом для нужд нескольких заказчиков, поставщиком (подрядчиком, исполнителем), который определен заказчиком, являющимся организатором такого мероприятия, в порядке, установленном Федеральным законом № 44-ФЗ";
      |Val="20150": Val="закупка театром, учреждением, осуществляющим концертную или театральную деятельность, в том числе концертным коллективом (танцевальным коллективом, хоровым коллективом, оркестром, ансамблем), телерадиовещательным учреждением, цирком, музеем, домом культуры, дворцом культуры, клубом, образовательным учреждением, зоопарком, планетарием, парком культуры и отдыха, заповедником, ботаническим садом, национальным парком, природным парком или ландшафтным парком, услуг (работ) на создание произведения литературы или искусства конкретным физическим лицом, на исполнение конкретным физическим лицом или конкретным юридическим лицом, осуществляющими концертную или театральную деятельность, в том числе концертным коллективом (танцевальным коллективом, хоровым коллективом, оркестром, ансамблем), либо на изготовление и поставку декораций, сценической мебели, сценических костюмов (в том числе головных уборов и обуви) и необходимых для создания декораций и костюмов материалов, а также театрального реквизита, бутафории, грима, постижерских изделий, театральных кукол, необходимых для создания и (или) исполнения произведений конкретным физическим или юридическим лицом";
      |Val="20160": Val="закупка услуг по реализации входных билетов и абонементов на посещение театрально-зрелищных, культурно-просветительных и зрелищно-развлекательных мероприятий, экскурсионных билетов и экскурсионных путевок - бланков строгой отчетности";
      |Val="20170": Val="закупка услуг по осуществлению авторского контроля за разработкой проектной документации объекта капитального строительства, проведению авторского надзора за строительством, реконструкцией, капитальным ремонтом объекта капитального строительства соответствующими авторами, на проведение технического и авторского надзора за выполнением работ по сохранению объекта культурного наследия (памятников истории и культуры) народов Российской Федерации авторами проектов";
      |Val="20180": Val="закупка услуг, связанных с обеспечением визитов глав иностранных государств, глав правительств иностранных государств, руководителей международных организаций, парламентских делегаций, правительственных делегаций, делегаций иностранных государств (гостиничное, транспортное обслуживание, эксплуатация компьютерного оборудования, оргтехники, звукотехнического оборудования (в том числе для обеспечения синхронного перевода), обеспечение питания)";
      |Val="20190": Val="закупка товаров, работ, услуг для обеспечения деятельности объектов государственной охраны, в том числе обеспечения выездных мероприятий, проводимых Президентом Российской Федерации, палатами Федерального Собрания Российской Федерации, Правительством Российской Федерации (бытовое, гостиничное, транспортное обслуживание, эксплуатация компьютерного оборудования, оргтехники, звукотехнического оборудования (в том числе для обеспечения синхронного перевода), обеспечение санитарно-эпидемиологического благополучия, предоставление питания (включая безопасное питание)";
      |Val="20200": Val="закупка услуг по управлению многоквартирным домом на основании решения общего собрания собственников помещений в многоквартирном доме или открытого конкурса, проводимого органом местного самоуправления в соответствии с жилищным законодательством, управляющей компанией, если помещения в многоквартирном доме находятся в частной, государственной или муниципальной собственности";
      |Val="20210": Val="закупка услуг по содержанию и ремонту одного или нескольких нежилых помещений, переданных в безвозмездное пользование или оперативное управление заказчику, в случае, если данные услуги оказываются другому лицу или другим лицам, пользующимся нежилыми помещениями, находящимися в здании, в котором расположены помещения, переданные заказчику в безвозмездное пользование или оперативное управление";
      |Val="20220": Val="закупка в связи с признанием определения поставщика (подрядчика, исполнителя) закрытым способом несостоявшимся и принятие заказчиком решения о заключении контракта с единственным поставщиком (подрядчиком, исполнителем) в соответствии с положениями части 9 статьи 89 и статьи 92 Федерального закона № 44-ФЗ по согласованию с уполномоченным Правительством Российской Федерации на осуществление данных функций федеральным органом исполнительной власти";
      |Val="20300": Val="закупка услуг, связанных с направлением работника в служебную командировку, а также с участием в проведении фестивалей, концертов, представлений и подобных культурных мероприятий (в том числе гастролей) на основании приглашений на посещение указанных мероприятий";
      |Val="20310": Val="закупка лекарственных препаратов, которые предназначены для назначения пациенту при наличии медицинских показаний (индивидуальная непереносимость, по жизненным показаниям) по решению врачебной комиссии, которое отражается в медицинских документах пациента и журнале врачебной комиссии";
      |Val="20320": Val="закупка по договору энергоснабжения или договору купли-продажи электрической энергии с гарантирующим поставщиком электрической энергии";
      |Val="20330": Val="закупка бюллетеней, открепительных удостоверений, специальных знаков (марок), используемых при проведении выборов в федеральные органы государственной власти, выборов в органы государственной власти субъектов Российской Федерации, референдума Российской Федерации и референдумов субъектов Российской Федерации, а также при проведении выборов в органы местного самоуправления и местных референдумов в муниципальных образованиях, являющихся административными центрами (столицами) субъектов Российской Федерации, за исключением случаев, установленных пунктом 6 части 2 статьи 1 Федерального закона № 44-ФЗ, у поставщика, определенного распоряжением Правительства Российской Федерации по предложениям высших исполнительных органов государственной власти субъектов Российской Федерации, Центральной избирательной комиссии";
      |Val="20340": Val="закупка для обеспечения федеральных нужд нежилого здания, строения, сооружения, нежилого помещения, определенных в соответствии с решением о подготовке и реализации бюджетных инвестиций или о предоставлении субсидий на осуществление капитальных вложений в целях приобретения объектов недвижимого имущества в государственную или муниципальную собственность, принятым в порядке, установленном Правительством Российской Федерации";
      |Val="20350": Val="аренда нежилого здания, строения, сооружения, нежилого помещения для обеспечения федеральных нужд, а также аренда жилых помещений, находящихся на территории иностранного государства заказчиками, осуществляющими свою деятельность на территории иностранного государства";
      |Val="20360": Val="закупка преподавательских услуг, а также услуг экскурсовода (гида), оказываемых физическими лицами";
      |Val="20370": Val="заключение федеральным органом исполнительной власти контракта с иностранной организацией на лечение гражданина Российской Федерации за пределами территории Российской Федерации в случае, если запрос предложений, проведенный в соответствии с пунктом 3 части 2 статьи 83 Федерального закона № 44-ФЗ, признан не состоявшимся в соответствии с частью 19 указанной статьи";
      |Val="20380": Val="заключение организациями, осуществляющими образовательную деятельность и признанными в соответствии с законодательством об образовании федеральными или региональными инновационными площадками, контрактов на поставки оборудования (в том числе его техническую эксплуатацию), программного обеспечения, необходимых для внедрения научно-технических результатов и результатов интеллектуальной деятельности, с обладателем исключительных прав на такие оборудование и программное обеспечение за счет средств, выделенных на развитие инновационной инфраструктуры в системе образования";
      |Val="20390": Val="заключение бюджетным учреждением контракта, предметом которого является выдача банковской гарантии";
      |Val="20400": Val="осуществление закупок изделий народных художественных промыслов признанного художественного достоинства, образцы которых зарегистрированы в порядке, установленном уполномоченным Правительством Российской Федерации федеральным органом исполнительной власти";
      |Val="20410": Val="заключение органами исполнительной власти, органами местного самоуправления контрактов на приобретение жилых помещений, соответствующих условиям отнесения к жилью экономического класса, установленным уполномоченным федеральным органом исполнительной власти, с юридическим лицом, заключившим в соответствии с Градостроительным кодексом Российской Федерации договор об освоении территории в целях строительства жилья экономического класса или договор о комплексном освоении территории в целях строительства жилья экономического класса, по цене и в сроки, которые определены договором об освоении территории в целях строительства жилья экономического класса или договором о комплексном освоении территории в целях строительства жилья экономического класса, при условии, что договором об освоении территории в целях строительства жилья экономического класса или договором о комплексном освоении территории в целях строительства жилья экономического класса предусмотрено заключение государственных и (или) муниципальных контрактов";
      |Val="20420": Val="заключение органами исполнительной власти, органами местного самоуправления контрактов на приобретение жилых помещений, соответствующих условиям отнесения к жилью экономического класса, установленным уполномоченным федеральным органом исполнительной власти, с лицом, заключившим в порядке и на условиях, которые предусмотрены ФЗ от 24 июля 2008 года № 161-ФЗ 'О содействии развитию жилищного строительства», договор безвозмездного срочного пользования земельным участком для строительства жилья экономического класса, в том числе для его комплексного освоения в целях строительства такого жилья, договор аренды земельного участка для строительства жилья экономического класса, в том числе для его комплексного освоения в целях строительства такого жилья, либо договор аренды земельного участка для строительства в минимально требуемом объеме жилья экономического класса, в том числе для его комплексного освоения в целях строительства в минимально требуемом объеме жилья экономического класса и иного жилищного строительства, по цене и в сроки, которые определены любым из этих договоров, при условии, что им предусмотрено заключение государственных и (или) муниципальных контрактов";
      |Val="20430": Val="осуществление закупок товаров, работ, услуг в целях обеспечения органов внешней разведки РФ средствами разведывательной деятельности в соответствии с перечнем товаров, работ, услуг, утвержденным руководителем соответствующего органа внешней разведки РФ";
      |Val="20440": Val="осуществление закупок товаров, работ, услуг в целях обеспечения органов федеральной службы безопасности средствами контрразведывательной деятельности и борьбы с терроризмом в соответствии с перечнем товаров, работ, услуг, утвержденным руководителем федерального органа исполнительной власти в области обеспечения безопасности";
      |Val="20450": Val="осуществление субъектами РФ за счет субсидий, предоставленных из федерального бюджета в соответствии со статьей 24.5 ФЗ от 24 июня 1998 года № 89-ФЗ 'Об отходах производства и потребления, закупки работ или услуг по выполнению инженерных изысканий, подготовке проектной документации для строительства объектов, используемых для обработки, утилизации отходов, объектов обезвреживания отходов, строительству и оснащению таких объектов у организаций, включенных в перечень, утвержденный Правительством Российской Федерации";
      |Val="30000": Val="способ определения поставщика (подрядчика, исполнителя), установленный Правительством Российской Федерации в соответствии со статьей 111 Федерального закона № 44-ФЗ";
      |Val="0"    : Val="закупка у единственного поставщика (подрядчика, исполнителя)(п.4 ч.1 ст.93 ФЗ N 44-ФЗ)";
    fi;
 fi;
 ^Val;
end;

Func СОП2СРЗ(Val:S; sID:S):S;
 if sID="СРЗ":
    if Val="0"         : ^"0";
      |Val="1"         : ^"11011";
      |Val="2"         : ^"11021";
      |Val="3"         : ^"11031";
      |Val="4"         : ^"11042";
      |Val="5"         : ^"11052";
      |Val="6"         : ^"11062";
      |Val="7"         : ^"12011";
      |Val="8"         : ^"12022";
      |Val="9"         : ^"13011";
      |Match(Val,"10!"): ^"14011";
      |Val="11"        : ^"20000";
      |Val="11.93_1_1" : ^"20010";
      |Val="11.93_1_2" : ^"20020";
      |Val="11.93_1_3" : ^"20030";
      |Val="11.93_1_4" : ^"0";
      |Val="11.93_1_5" : ^"20000";
      |Val="11.93_1_6" : ^"20040";
      |Val="11.93_1_7" : ^"20050";
      |Val="11.93_1_8" : ^"20060";
      |Val="11.93_1_9" : ^"20070";
      |Val="11.93_1_10": ^"20080";
      |Val="11.93_1_11": ^"20090";
      |Val="11.93_1_12": ^"20100";
      |Val="11.93_1_13": ^"20110";
      |Val="11.93_1_14": ^"20120";
      |Val="11.93_1_15": ^"20130";
      |Val="11.93_1_16": ^"20140";
      |Val="11.93_1_17": ^"20150";
      |Val="11.93_1_18": ^"20160";
      |Val="11.93_1_19": ^"20170";
      |Val="11.93_1_20": ^"20180";
      |Val="11.93_1_21": ^"20190";
      |Val="11.93_1_22": ^"20200";
      |Val="11.93_1_23": ^"20210";
      |Val="11.93_1_24": ^"20220";
      |Val="11.93_1_26": ^"20300";
      |Val="11.93_1_28": ^"20310";
    fi;
   |sID="СОП":
    if Val="11011": ^"1";
      |Val="11021": ^"2";
      |Val="11031": ^"3";
      |Val="11042": ^"4";
      |Val="11052": ^"5";
      |Val="11062": ^"6";
      |Val="12011": ^"7";
      |Val="12022": ^"8";
      |Val="13011": ^"9";
      |Val="14011": ^"10";
      |Val="20000": ^"11.93_1_4";
      |Val="20010": ^"11.93_1_1";
      |Val="20020": ^"11.93_1_2";
      |Val="20030": ^"11.93_1_3";
      |Val="20040": ^"11.93_1_6";
      |Val="20050": ^"11.93_1_7";
      |Val="20060": ^"11.93_1_8";
      |Val="20070": ^"11.93_1_9";
      |Val="20080": ^"11.93_1_10";
      |Val="20090": ^"11.93_1_11";
      |Val="20100": ^"11.93_1_12";
      |Val="20110": ^"11.93_1_13";
      |Val="20120": ^"11.93_1_14";
      |Val="20130": ^"11.93_1_15";
      |Val="20140": ^"11.93_1_16";
      |Val="20150": ^"11.93_1_17";
      |Val="20160": ^"11.93_1_18";
      |Val="20170": ^"11.93_1_19";
      |Val="20180": ^"11.93_1_20";
      |Val="20190": ^"11.93_1_21";
      |Val="20200": ^"11.93_1_22";
      |Val="20210": ^"11.93_1_23";
      |Val="20220": ^"11.93_1_24";
      |Val="20300": ^"11.93_1_26";
      |Val="20310": ^"11.93_1_28";
      |Val="20320": ^"11";
      |Val="20330": ^"11";
      |Val="20340": ^"11";
      |Val="20350": ^"11";
      |Val="20360": ^"11";
      |Val="20370": ^"11";
      |Val="20380": ^"11";
      |Val="20390": ^"11";
      |Val="20400": ^"11";
      |Val="20410": ^"11";
      |Val="20420": ^"11";
      |Val="20430": ^"11";
      |Val="20440": ^"11";
      |Val="20450": ^"11";
      |Val="30000": ^"";
    fi;
 fi;
 ^Val;
end;

Func ОКП_ВзятьНаим (vUKey:Record):S;
var OWA,p,n,nr,z:I;
var Код1,Код2,Ret,tmp:S;
 Ret="";
 OWA=OpenWorkArea("РПО_ОКП","Код","UKey="+RecordToString(vUKey));
 Try
  Ret=GetFieldS(OWA,1,"НАИМ");
  Код2=GetFieldS(OWA,1,"КОД");
  if SubStr(Код2,6,1)="0":
     p=Pos(" /",Ret);
     if not p=0: Ret=SubStr(Ret,1,p-1)+SubStr(Ret,p+2,255); fi;
    else
     if Pos("-",Ret)=1:
        Ret=SubStr(Ret,2,255);
        Код1=SubStr(Код2,1,5)+"0";
        SetFilter(OWA,"КОД>='"+Код1+"' and КОД<'"+Код2+"'");
        nr=Records(OWA);
        for n=1..nr do
         z=nr-n+1;
         tmp=GetFieldS(OWA,z,"НАИМ");
         p=Pos(" /",tmp);
         if not p=0:
             Ret=SubStr(tmp,1,p-1)+Ret;
             Break;
         fi;
        od;
     fi; --if Pos("-",Ret)=1:
  fi; --if SubStr(Код1,6,1)="0":
 Finally
  CloseWorkArea(OWA);
 end;
 ^Ret;
end;

Func ОКП_ЕстьВидПрод (vКод:S):L;
var OWA:I;
var tmp:s;
 if not SubStr(vКод,6,1)="0": ^False; fi;
 tmp=SubStr(vКод,1,5)+"9";
 OWA=OpenWorkArea("РПО_ОКП","","КОД>'"+vКод+"' and КОД<='"+tmp+"'");
 Try
  if Records(OWA)=0: ^False; fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^True;
end;

-- Функционал для работы с ОКВ
--кэшированные данные
var ОКВ_Код[]:S;
var ОКВ_Имя[]:S;
var ОКВ_Наим[]:S;

var fОКВ:I = [0];

Func ОКВ_Загружен:L;
 if Раб.Договор.fОКВ = 0:
    --Загружаем без вопросов - функция должна вызываться прямо перед обращением к базе
    Раб.Договор.fОКВ = ЗагрузСправ("РПО_ОКВ",PlanVar("Std_Rpo")+"\DBF\РПО_ОКВ",ieCRD,"");
 fi;
 Return (Раб.Договор.fОКВ <> 0);
end;

Func ЗагрузитьОКВПоФильтру(F:S):I;
  -- Загружает 1 страну на основе фильтра на таблицу
  -- Возвращает позицию в массиве кэшей
  -- Если стран больше 1 - возвращает указатель на последнюю
  var OWA, n, i:I;
  i = -1; --Будет возвращено при ошибке (в т.ч. при пустом фильтре)
  if РАБ.ДОГОВОР.ОКВ_Код[1] = '':
   --Пустое значение - значит массив обнулился при перезапуске, вычищаем
     ClearVariable(РАБ.ДОГОВОР.ОКВ_Имя);
     ClearVariable(РАБ.ДОГОВОР.ОКВ_Код);
     ClearVariable(РАБ.ДОГОВОР.ОКВ_Наим);
  fi;

  OWA = OpenWorkArea("РПО_ОКВ","",F);
  try
    for n = 1 .. Records(OWA) do --Не делаем оптимизаций, поскольку планируется минимум заходов
      i = LengthOfArray(РАБ.ДОГОВОР.ОКВ_Имя);
      i = i + 1; --Добавляем после последнего
      РАБ.ДОГОВОР.ОКВ_Имя[i] = GetFieldS(OWA, n, "ИМЯ");
      РАБ.ДОГОВОР.ОКВ_Код[i] = GetFieldS(OWA, n, "КОД");
      РАБ.ДОГОВОР.ОКВ_Наим[i] = GetFieldS(OWA, n, "Наименование");
    od;
  finally
    CloseWorkArea(OWA);
  end;
  return i;
end;

Func КодОквПоИмени(ИмяВал:S):S;
  var i:I;
  if not ОКВ_Загружен:
    ^"";
  fi;
  -- Здесь некоторое количество однонаправленных синонимов для соответствия принятым русскоязычным обозначения
  if ИмяВал = "РУБ":
     ИмяВал = "RUB";
  fi;
  i = SearchInArray(РАБ.ДОГОВОР.ОКВ_ИМЯ, ИмяВал);
  if i = -1:
    i = ЗагрузитьОКВПоФильтру("ИМЯ='"+ИмяВал+"'");
  fi;
  if i = -1:
     --Так ничего и не нашли
     ^"";
  fi;
  Return ОКВ_Код[i];
end;



Func ВзятьЗначОКВ (Val:S; sVoc:S; tVoc:S):S;
var OWA:I;
 OWA=OpenWorkArea("РПО_ОКВ","",sVoc+"='"+Val+"'");
 Try
  if not Records(OWA)=0:
     ^GetFieldS(OWA,1,tVoc);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^"";
end;

Func ОКДП_В_Запись (aКод:S; aФильтр:S): Record;
var OWA:I;
var vКод:S;
 if not aКод="": vКод="(Код='"+aКод+"')"; else vКод=""; fi;
 aФильтр=Раб.Бюджет2005.Объединить(vКод,aФильтр," and ");
 OWA=OpenWorkArea("РПО_ОКДП","",aФильтр);
 Try
  if not Records(OWA)=0:     
     ^GetRecordKey(OWA,1);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Func ОКДП_Гр_В_Запись (aКод:S; aФильтр:S; ver:i): Record;
var OWA:I;
var vКод,Voc:S;
 voc=if(ver=273,"'ОКДП_Гр273'","'ОКДП_Гр'");
 if not aКод="": vКод="(Name_Voc="+voc+" and Code='"+aКод+"')"; else vКод="(Name_Voc="+voc+")"; fi;
 aФильтр=Раб.Бюджет2005.Объединить(vКод,aФильтр," and ");
 OWA=OpenWorkArea("РПО_БЮДЖ_КЛАСС","",aФильтр);
 Try
  if not Records(OWA)=0:     
     ^GetRecordKey(OWA,1);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Func ВзятьЗначОКДП(aКод:S; aПоказатель:S):S;
var OWA,z:I;
var Val:S;
 z=SearchInArray(Раб.Договор.cacheОКДП_Код,Up(aКод+"#"+aПоказатель));
 if z=-1:
    OWA=OpenWorkArea("РПО_ОКДП","","Код='"+aКод+"'");
    Try
     z=InsertInArraySort(Раб.Договор.cacheОКДП_Код,Up(aКод+"#"+aПоказатель));
     if not Records(OWA)=0:
        val=GetFieldS(OWA,1,aПоказатель);
       else
        val="";
     fi;
     InsertInArray(Раб.Договор.cacheОКДП_Знач,z,val);
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
 ^Раб.Договор.cacheОКДП_Знач[z];
end;

Func ОКПД_В_Запись (aКод:S; aФильтр:S): Record;
var OWA:I;
var vКод:S;
 if not aКод="": vКод="(Код='"+aКод+"')"; else vКод=""; fi;
 aФильтр=Раб.Бюджет2005.Объединить(vКод,aФильтр," and ");
 OWA=OpenWorkArea("РПО_ОКПД","",aФильтр);
 Try
  if not Records(OWA)=0:     
     ^GetRecordKey(OWA,1);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Func ВзятьЗначОКПД(aКод:S; aПоказатель:S):S;
var OWA,z:I;
var Val:S;
 z=SearchInArray(Раб.Договор.cacheОКДП_Код,Up(aКод+"#"+aПоказатель));
 if z=-1:
    OWA=OpenWorkArea("РПО_ОКПД","","Код='"+aКод+"'");
    Try
     z=InsertInArraySort(Раб.Договор.cacheОКДП_Код,Up(aКод+"#"+aПоказатель));
     if not Records(OWA)=0:
        val=GetFieldS(OWA,1,aПоказатель);
       else
        val="";
     fi;
     InsertInArray(Раб.Договор.cacheОКДП_Знач,z,val);
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
 ^Раб.Договор.cacheОКДП_Знач[z];
end;

Func ОКДП_В_Признак(aГр:S; aКод:S; RefAna:L; ver:i):S;
var Признак_,tmp,voc:S;
var OWA,n:I;
 if ver=1:
    if not aГр="" or aКод="": ^""; fi;
   else
    if aГр="": ^""; fi;
 fi;
 voc=if(ver=1:"ОКПД."|ver=273:"ОКДП2."|true:"ОКДП.");
 if RefAna: RefreshAna; fi;
 if ver=1:
    Признак_=aКод;
   else
    Признак_=aГр+if(aКод="","","."+aКод);
 fi;
 if Name_A(voc+Признак_)=" ":
    if ver=1:
       tmp=ВзятьЗначОКПД(aКод,"Наим");
      else
       if aКод="":
          tmp=Раб.Бюджет.НаимКБК(if(ver=273,"ОКДП_ГР273","ОКДП_ГР"),aГр);
         else
          tmp=ВзятьЗначОКДП(aКод,"Наим");
       fi;
    fi;
    OWA=OpenWorkArea("РПО_Признак_ОКДП","","Признак='"+Признак_+"'"+if(ver=0," and (ver=0 or ver=601)"," and ver="+Str(ver)));
    Try
     BeginChanging(OWA,False);
     Try
      n=Records(OWA);
      if n=0: n=InsertRecord(OWA); fi;
      if not GetFieldS(OWA,n,"Признак")=Признак_: n=PutFieldS(OWA,n,"Признак",Признак_); fi;
      if not GetFieldS(OWA,n,"Признак_Кмнт")=tmp: n=PutFieldS(OWA,n,"Признак_Кмнт",tmp); fi;
      if not GetFieldL(OWA,n,"Разрешено"): n=PutFieldL(OWA,n,"Разрешено",True); fi;
      if not GetFieldI(OWA,n,"ver")=ver: n=PutFieldI(OWA,n,"ver",ver); fi;
      EndChanging(OWA);
     Except
      CancelChanging(OWA);
      Raise;
     end;
    Finally
     CloseWorkArea(OWA);
    end;
    if RefAna: RefreshAna; fi;
 fi;
 ^voc+Признак_;
end;

Func ВзятьЗначОКЕИ (Val:S; sVoc:S; tVoc:S):S;
var OWA:I;
 OWA=OpenWorkArea("РПО_ОКЕИ","",sVoc+"='"+Val+"'");
 Try
  if not Records(OWA)=0:
     ^GetFieldS(OWA,1,tVoc);
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 ^"";
end;

Proc ВводДлинСтр(vЗагл:S; LS:I; RO:L);
 Раб.Договор.Run=True;
 Раб.Договор.УпрLS=LS;
 Раб.Договор.ЗаглLS=vЗагл;
 Раб.Договор.ROLS=RO;
 OpenBlank("Раб.Договор",True);
 Раб.Договор.Run=False;
end;

Proc НачатьИндексацию;
 ClearVariable(Раб.Договор.idxЗнач);
 ClearVariable(Раб.Договор.idxКлюч);
 ClearVariable(Раб.Договор.idxИндекс);
 ClearVariable(Раб.Договор.idx);
end;

Func ПолучитьИндекс(aЧислоНаим:I; aЧислоЗнаков: I):S;
var n,z:i;
var Ret:S;
 Ret="";
 for n=1..aЧислоНаим do
  if idxЗнач[n]="":
     Ret=Ret+Str16(0,aЧислоЗнаков);
    else
     z=SearchInArray(Раб.Договор.idxКлюч,idxЗнач[n],True);
     if z=-1:
        idx=idx+1;
        z=InsertInArraySort(idxКлюч,idxЗнач[n]);
        InsertInArray(idxИндекс,z,idx);
     fi;
     Ret=Ret+Str16(idxИндекс[z],aЧислоЗнаков);
  fi;
 od;
 ^Ret;
end;

Proc Очиститьlst;
 ClearVariable(Раб.Договор.lstКлюч);
 ClearVariable(Раб.Договор.lstКлюч1);
 ClearVariable(Раб.Договор.lstТекст);
 ClearVariable(Раб.Договор.lstКарт);
 ClearVariable(Раб.Договор.lstДок);
 ClearVariable(Раб.Договор.lstНомДок);
 ClearVariable(Раб.Договор.lstДатДок);
 ClearVariable(Раб.Договор.lstДатРег);
 ClearVariable(Раб.Договор.lstАванс);
 ClearVariable(Раб.Договор.lstАннул);
 ClearVariable(Раб.Договор.lstТекГод);
 ClearVariable(Раб.Договор.lstВД);
 ClearVariable(Раб.Договор.lstКБК);
 ClearVariable(Раб.Договор.lstОбщПризн1);
 ClearVariable(Раб.Договор.lstОбщПризн2);
 ClearVariable(Раб.Договор.lstПризн);
 ClearVariable(Раб.Договор.lstПризнДоп);
 ClearVariable(Раб.Договор.lstПризнОКДП);
 ClearVariable(Раб.Договор.lstСум);
 ClearVariable(Раб.Договор.lstСумРуб);
 ClearVariable(Раб.Договор.lstОпл);
 ClearVariable(Раб.Договор.lstОплРуб);
 ClearVariable(Раб.Договор.lstТМЦ);
 ClearVariable(Раб.Договор.lstПредм1);
 ClearVariable(Раб.Договор.lstПредм2);
 ClearVariable(Раб.Договор.lstПредм3);
 ClearVariable(Раб.Договор.lstПредм4);
 ClearVariable(Раб.Договор.lstТМЦ16);
 ClearVariable(Раб.Договор.lstОКДП_Гр);
 ClearVariable(Раб.Договор.lstОКДП);
 ClearVariable(Раб.Договор.lstЕдИзм);
 ClearVariable(Раб.Договор.lstКол);
 ClearVariable(Раб.Договор.lstЦена);
 ClearVariable(Раб.Договор.verОКДП_Гр);
end;

Proc Договор_СуммаСроки(aДоговор: Record; aДата:D);
var OWA,nn,i:I;
var ТекГод_,tmp:S;
 ClearVariable(Раб.Договор.ДН);
 ClearVariable(Раб.Договор.ДК);
 ClearVariable(Раб.Договор.СумДок);
 ClearVariable(Раб.Договор.СумРубДок);
 ClearVariable(Раб.Договор.СумАванс);
 ClearVariable(Раб.Договор.СумТек);
 ClearVariable(Раб.Договор.СумРубТек);
 ClearVariable(Раб.Договор.ОплДок);
 ClearVariable(Раб.Договор.ОплРубДок);
 ClearVariable(Раб.Договор.ОплТек);
 ClearVariable(Раб.Договор.ОплРубТек);
 ClearVariable(Раб.Договор.Года);
 ClearVariable(Раб.Договор.ГодТек);
 ClearVariable(Раб.Договор.СумГод);
 ClearVariable(Раб.Договор.Контр_Банк);
 ClearVariable(Раб.Договор.Рег);
 ClearVariable(Раб.Договор.Статус);
 if aДоговор=nil: Exit; fi;
 OWA=OpenWorkArea(crdДоговор,"","Рег and UKey="+RecordToString(aДоговор));
 Try
  nn=Records(OWA);
  if nn=0:
     Message("Договор не найден или не зарегистрован",mtError);
    else
     ДН=GetFieldD(OWA,1,"ДатаН");
     ДК=GetFieldD(OWA,nn,"ДатаК");
     СумДок=GetFieldN(OWA,nn,"СумДок");
     СумРубДок=0;
     СумАванс=GetFieldN(OWA,nn,"СумАв");
     СумТек=GetFieldN(OWA,nn,"СумТек");
     СумРубТек=0;
     ТекГод_=GetFieldS(OWA,nn,"ТекГод");
     if GetFieldL(OWA,nn,"Учет_Реестр_ОФК") or GetFieldI(OWA,nn,"ver")>0:
        tmp=GetFieldS(OWA,nn,"Год1");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод1"); fi;
        tmp=GetFieldS(OWA,nn,"Год2");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод2"); fi;
        tmp=GetFieldS(OWA,nn,"Год3");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод3"); fi;
        tmp=GetFieldS(OWA,nn,"Год4");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод4"); fi;
        tmp=GetFieldS(OWA,nn,"Год5");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод5"); fi;
        tmp=GetFieldS(OWA,nn,"Год6");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод6"); fi;
        tmp=GetFieldS(OWA,nn,"Год7");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод7"); fi;
        tmp=GetFieldS(OWA,nn,"Год8");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод8"); fi;
        tmp=GetFieldS(OWA,nn,"Год9");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод9"); fi;
        tmp=GetFieldS(OWA,nn,"Год10");
        if not tmp="": i=i+1; Года[i]=tmp; if tmp=ТекГод_: ГодТек=i; fi; СумГод[i]=GetFieldN(OWA,nn,"СумГод10"); fi;
       else
        Года[1]=ТекГод_; ГодТек=1; СумГод[1]=СумТек;
     fi;
     Контр_Банк=GetFieldR(OWA,nn,"Контр_Банк");
     Рег=GetFieldL(OWA,nn,"Рег");
     if GetFieldL(OWA,1,"Исполнен"): Статус=1; ОплДок=GetFieldN(OWA,nn,"ИсполФактОпл"); ОплТек=Min(СумТек,ОплДок); ОплРубДок=0; ОплРубТек=0;
       |GetFieldL(OWA,1,"Аннулирован"): Статус=-1; ОплДок=GetFieldN(OWA,nn,"АннулФактОпл"); ОплТек=Min(СумТек,ОплДок); ОплРубДок=0; ОплРубТек=0;
     fi;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Func Договор_КБК(aФильтр:S; aТекГод:S; isAlt:L):I;
var OWA,n,nn,z:I;
var Вал_,ВД_,КБК_,ОбщПризн1_,ОбщПризн2_,Призн_,Key_:S;
var Сум_,Опл_:N;
 Очиститьlst;
 OWA=OpenWorkArea(crdДоговор_КБК,"ВД;КБК;ПРИЗН",aФильтр);
 Try
  nn=Records(OWA);
  for n=1..nn do
   if n=1:
      ОбщПризн1_=GetFieldS(OWA,n,"Договор.Общ_Призн1");
      ОбщПризн2_=GetFieldS(OWA,n,"Договор.Общ_Призн2");
      if aТекГод="": aТекГод=GetFieldS(OWA,n,"Договор.ТекГод"); fi;
   fi;
   ВД_=GetFieldS(OWA,n,"ВД");
   КБК_=GetFieldS(OWA,n,"КБК");
   Призн_=Раб.Бюджет2005.СортироватьНаборСлов(GetFieldS(OWA,n,"Призн")," ",True);
   Призн_=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Призн_," ","ЛС.*","");
   if (aТекГод="" or not GetFieldL(OWA,n,"Договор.Учет_Реестр_ОФК") or GetFieldS(OWA,n,"Договор.ТекГод")=aТекГод) and GetFieldI(OWA,n,"Договор.ver")=0:
      Сум_=GetFieldN(OWA,n,"Сум");
     else
      if aТекГод=GetFieldS(OWA,n,"Год1"): Сум_=GetFieldN(OWA,n,"СумГод1");
        |aТекГод=GetFieldS(OWA,n,"Год2"): Сум_=GetFieldN(OWA,n,"СумГод2");
        |aТекГод=GetFieldS(OWA,n,"Год3"): Сум_=GetFieldN(OWA,n,"СумГод3");
        |aТекГод=GetFieldS(OWA,n,"Год4"): Сум_=GetFieldN(OWA,n,"СумГод4");
        |aТекГод=GetFieldS(OWA,n,"Год5"): Сум_=GetFieldN(OWA,n,"СумГод5");
        |aТекГод=GetFieldS(OWA,n,"Год6"): Сум_=GetFieldN(OWA,n,"СумГод6");
        |aТекГод=GetFieldS(OWA,n,"Год7"): Сум_=GetFieldN(OWA,n,"СумГод7");
        |aТекГод=GetFieldS(OWA,n,"Год8"): Сум_=GetFieldN(OWA,n,"СумГод8");
        |aТекГод=GetFieldS(OWA,n,"Год9"): Сум_=GetFieldN(OWA,n,"СумГод9");
        |aТекГод=GetFieldS(OWA,n,"Год10"): Сум_=GetFieldN(OWA,n,"СумГод10");
      fi;
   fi;
   Опл_=0;
   if GetFieldL(OWA,n,"Договор.Исполнен") or GetFieldL(OWA,n,"Договор.Аннулирован"):
-- закомент связи с тем что если график неправильный оплата может быть больше графика
--      Опл_=Min(Сум_,GetFieldN(OWA,n,"ФактОпл"));
      Опл_=GetFieldN(OWA,n,"ФактОпл");
   fi;
   Key_=ВД_+"#"+КБК_+"#"+Призн_;
   z=SearchInArray(Раб.Договор.LstКлюч,Key_,True);
   if z=-1:
      z=InsertInArraySort(Раб.Договор.LstКлюч,Key_);
      InsertInArray(Раб.Договор.LstВД,z,ВД_);
      InsertInArray(Раб.Договор.LstКБК,z,КБК_);
      InsertInArray(Раб.Договор.LstОбщПризн1,z,ОбщПризн1_);
      InsertInArray(Раб.Договор.LstОбщПризн2,z,ОбщПризн2_);
      InsertInArray(Раб.Договор.LstПризн,z,Призн_);
      InsertInArray(Раб.Договор.LstСум,z,Сум_);
      InsertInArray(Раб.Договор.LstОпл,z,Опл_);
     else
      LstСум[z]=LstСум[z]+Сум_;
      LstОпл[z]=LstОпл[z]+Опл_;
   fi;
  od;
  if not nn=0 and isAlt:
     Вал_=Lo(ВзятьЗначОКВ(GetFieldS(OWA,1,"Договор.ОКВ"),"Код","Имя"));
     if Вал_="RUB": Вал_="руб"; fi;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 nn=LengthOfArray(Раб.Договор.LstКлюч);
 if isAlt:
    for n=1..nn do
     Призн_=Trim(LstОбщПризн1[n]+" "+LstОбщПризн2[n]);
     Призн_=Trim(Призн_+" "+LstПризн[n]);
     LstТекст[n]=LstВД[n]+"  "+LstКБК[n]+"  {"+Призн_+"}  = "+Format("%.2N",LstСум[n])+" "+Вал_;
    od;
    if altВсе=1 and nn=1: altВсе=0; fi;
    if altВсе=1:
       InsertInArray(Раб.Договор.LstТекст,1,"Выбрать все КБК");
    fi;
    n=Alternate(altЗагл,Раб.Договор.LstТекст,-1,SearchInArray(Раб.Договор.LstКлюч,altЗнач)+if(altВсе=1,1,0),12);
    if altВсе=1 and n=1: 
       altВсе=-1; 
      else
       altВсе=0;
       nn=n;
    fi;
 fi;
 ^nn;
end;

Func Договор_Предм(aФильтр:S; aРежим:S; isAlt:L):I; --aРежим="ОКДП_Гр" группировка по номенклатурным группам; --aРежим="ОКДП" группировка по кодам ОКДП; aРежим="ТМЦ" группировка по ТМЦ; aРежим="" ОКДП+ТМЦ
var OWA,n,nn,z,ТМЦ16_:I;
var Вал_,ЕдИзм_,ОКДП_Гр_,ОКДП_,Key_:S;
var Кол_,Цена_,Сум_:N;
var ТМЦ_: Record;
 Очиститьlst;
 --НачатьИндексацию;
 OWA=OpenWorkArea(crdДоговор_ТМЦ,if(aРежим="ТМЦ","НаимТМЦ;НаимТМЦ2;НаимТМЦ3;НаимТМЦ4","ОКДП_Гр;ОКП"),aФильтр);
 Try
  nn=Records(OWA);
  for n=1..nn do
   ClearVariable(Раб.Договор.idxЗнач);
   ТМЦ_=nil;
   ОКДП_Гр_="";
   ОКДП_="";
   ЕдИзм_="";
   Кол_=0;
   Цена_=0;
   Сум_=GetFieldN(OWA,n,"Сум");
   Key_="";
   if aРежим="ОКДП_Гр":
      ОКДП_Гр_=GetFieldS(OWA,n,"ОКДП_Гр");
      if ОКДП_Гр_="": ОКДП_Гр_="000"; fi;
      ОКДП_=GetFieldS(OWA,n,"ОКП");
      if ОКДП_="" or Length(ОКДП_)=6: ОКДП_Гр_="000"; fi;
      Key_=ОКДП_Гр_;
   fi;
   if aРежим="ОКДП" or aРежим="":
      ОКДП_Гр_=GetFieldS(OWA,n,"ОКДП_Гр");
      if ОКДП_Гр_="": ОКДП_Гр_="000"; fi;
      ОКДП_=GetFieldS(OWA,n,"ОКП");
      if ОКДП_="" or Length(ОКДП_)=6: ОКДП_Гр_="000"; ОКДП_="0000000"; fi;
      Key_=ОКДП_Гр_+"."+ОКДП_+if(aРежим="","#","");
   fi;
   if aРежим="ТМЦ" or aРежим="":
      ТМЦ_=GetFieldR(OWA,n,"ТМЦ");
      ТМЦ16_=GetFieldI(OWA,n,"ТМЦ16");
      if ТМЦ_=nil:
         idxЗнач[1]=GetFieldS(OWA,n,"НаимТМЦ");
         idxЗнач[2]=GetFieldS(OWA,n,"НаимТМЦ2");
         idxЗнач[3]=GetFieldS(OWA,n,"НаимТМЦ3");
         idxЗнач[4]=GetFieldS(OWA,n,"НаимТМЦ4");
         if ТМЦ16_=0:
            ТМЦ16_=Раб.crc16.crc16_(0,idxЗнач[1]);
            ТМЦ16_=Раб.crc16.crc16_(ТМЦ16_,idxЗнач[2]);
            ТМЦ16_=Раб.crc16.crc16_(ТМЦ16_,idxЗнач[3]);
            ТМЦ16_=Раб.crc16.crc16_(ТМЦ16_,idxЗнач[4]);
         fi;
         Key_=Key_+Str(ТМЦ16_)+"#";
         --Key_=Key_+ПолучитьИндекс(4,3)+"#";         --нуно заменить на значение crc16?
        else
         idxЗнач[1]=GetFieldS(OWA,n,"ТМЦ.Коммент");
         Key_=Key_+RecordToString(ТМЦ_)+"#";
      fi;
      ЕдИзм_=GetFieldS(OWA,n,"ЕдИзм");
      Кол_=GetFieldN(OWA,n,"Кол");
      Цена_=GetFieldN(OWA,n,"Цена");
      Key_=Key_+Up(ЕдИзм_)+"#"+Format("%.2F",Цена_);
   fi;
   z=SearchInArray(Раб.Договор.LstКлюч,Key_,True);
   if z=-1:
      z=InsertInArraySort(Раб.Договор.LstКлюч,Key_);
      InsertInArray(Раб.Договор.LstТМЦ,z,ТМЦ_);
      InsertInArray(Раб.Договор.LstПредм1,z,idxЗнач[1]);
      InsertInArray(Раб.Договор.LstПредм2,z,idxЗнач[2]);
      InsertInArray(Раб.Договор.LstПредм3,z,idxЗнач[3]);
      InsertInArray(Раб.Договор.LstПредм4,z,idxЗнач[4]);
      InsertInArray(Раб.Договор.LstТМЦ16,z,ТМЦ16_);
      InsertInArray(Раб.Договор.LstОКДП_Гр,z,ОКДП_Гр_);
      InsertInArray(Раб.Договор.LstОКДП,z,ОКДП_);
      InsertInArray(Раб.Договор.LstЕдИзм,z,ЕдИзм_);
      InsertInArray(Раб.Договор.LstКол,z,Кол_);
      InsertInArray(Раб.Договор.LstЦена,z,Цена_);
      InsertInArray(Раб.Договор.LstСум,z,Сум_);
     else
      LstКол[z]=LstКол[z]+Кол_;
      LstСум[z]=LstСум[z]+Сум_;
   fi;
  od;
  if nn=0:
     Раб.Договор.verОКДП_Гр=-1;
    else
     Раб.Договор.verОКДП_Гр=GetFieldI(OWA,1,"Договор.verОКДП_Гр");
     if isAlt:
        Вал_=Lo(ВзятьЗначОКВ(GetFieldS(OWA,1,"Договор.ОКВ"),"Код","Имя"));
        if Вал_="RUB" or Вал_="": Вал_="руб"; fi;
     fi;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 nn=LengthOfArray(Раб.Договор.LstКлюч);
 if nn=0:
    if aРежим="ОКДП_Гр":
       Key_="000";
       z=InsertInArraySort(Раб.Договор.LstКлюч,Key_);
       InsertInArray(Раб.Договор.LstОКДП_Гр,z,"000");
      |aРежим="ОКДП" or aРежим="":
       Key_="000"+".0000000";
       z=InsertInArraySort(Раб.Договор.LstКлюч,Key_);
       InsertInArray(Раб.Договор.LstОКДП_Гр,z,"000");
       InsertInArray(Раб.Договор.LstОКДП,z,"0000000");
    fi;
    nn=LengthOfArray(Раб.Договор.LstКлюч);
 fi;
 if isAlt:
    for n=1..nn do
     LstТекст[n]="";
     if aРежим="ОКДП_Гр" and not LstОКДП_Гр[n]="000":
        LstТекст[n]=Раб.Бюджет.НаимКБК(if(Раб.Договор.verОКДП_Гр=273,"ОКДП_ГР273","ОКДП_ГР"),LstОКДП_Гр[n]);
        if Length(LstТекст[n])>118:
           LstТекст[n]=SubStr(LstТекст[n],1,118)+"...";
        fi;
        LstТекст[n]=LstОКДП_Гр[n]+" --"+LstТекст[n];
     fi;
     if aРежим="ОКДП" or aРежим="":
        if aРежим="ОКДП" and not LstОКДП[n]="0000000":
           LstТекст[n]=ВзятьЗначОКДП(LstОКДП[n],"НАИМ");
           if Length(LstТекст[n])>118:
              LstТекст[n]=SubStr(LstТекст[n],1,118)+"...";
           fi;
        fi;
        LstТекст[n]=Раб.Бюджет2005.Объединить(LstОКДП_Гр[n],LstОКДП[n],".")+" "+if(aРежим="ОКДП","--"+LstТекст[n],"");
     fi;
     if aРежим="ТМЦ" or aРежим="":
        LstТекст[n]=LstТекст[n]+SubStr(LstПредм1[n]+LstПредм2[n]+LstПредм3[n]+LstПредм4[n],1,118);
        if Length(LstПредм1[n]+LstПредм2[n]+LstПредм3[n]+LstПредм4[n])>118: LstТекст[n]=LstТекст[n]+"..."; fi;
     fi;
     if Раб.Договор.LstЦена[n]=0 or aРежим="ОКДП_Гр" or aРежим="ОКДП":
        LstТекст[n]=LstТекст[n]+"  ["+Format("%.2N",LstСум[n])+" "+Вал_+"]";
       else
        LstТекст[n]=LstТекст[n]+"  ["+Format("%.2F",LstКол[n])+" "+Lo(LstЕдИзм[n])+"  X  "+Format("%.2N",LstЦена[n])+" = "+Format("%.2N",LstСум[n])+" "+Вал_+"]";
     fi;
    od;
    if altВсе=1 and nn=1: altВсе=0; fi;
    if altВсе=1:
       InsertInArray(Раб.Договор.LstТекст,1,"Выбрать все наименования");
    fi;
    n=Alternate(altЗагл,Раб.Договор.LstТекст,-1,SearchInArray(Раб.Договор.LstКлюч,altЗнач)+if(altВсе=1,1,0),12);
    if altВсе=1 and n=1: 
       altВсе=-1; 
      else
       altВсе=0;
       nn=n;
    fi;
 fi;
 ^nn;
end;

Func ДО_КБК(aФильтр:S; aСубФильтр:S; aДК:D; spДок:L; isAlt:L):I;
var OWA,n1,nn1,z,OA,n2,nn2,i,ii:I;
var НомДок_,НаимДок_,Вал_,ТекГод_,ВД_,КБК_,ОбщПризн1_,ОбщПризн2_,Призн_,ПризнДоп_,ПризнОКДП_,Key_,tmp:S;
var Сум_,СумРуб_:N;
var ДатДок_,ДатРег_,ДатАннул_:D;
var Док_: Record;
var Аванс_,Аннул_,АннулЧасть_:L;
var tmp1,tmp2:S;
 Очиститьlst;
 Try
  OWA=OpenWorkArea(crdДО,"ДатаДок",aФильтр);
  Try
   nn1=Records(OWA);
   for n1=1..nn1 do
    Док_=GetRecordKey(OWA,n1);
    ОбщПризн1_=GetFieldS(OWA,n1,"Общ_Призн1");
    ОбщПризн2_=GetFieldS(OWA,n1,"Общ_Призн2");
    Аннул_=GetFieldL(OWA,n1,"Аннул");
    АннулЧасть_=GetFieldL(OWA,n1,"Аннул_Часть");
    ДатАннул_=GetFieldD(OWA,n1,"Аннул_Дата");
    if Аннул_ and ДатАннул_>aДК and aДК>1.1.100: Аннул_=False; fi;
    if spДок:
       НомДок_=GetFieldS(OWA,n1,"НомерДок");
       ДатДок_=GetFieldD(OWA,n1,"ДатаДок");
       ДатРег_=GetFieldD(OWA,n1,"ДатаРег");
       НаимДок_=GetFieldS(OWA,n1,"НаимДок.Наим");
       Аванс_=GetFieldL(OWA,n1,"Аванс");
       tmp1=Раб.Формат.ДатаСтр(ДатРег_,Раб.Формат.dfYYYYMMDD)+"#"+Раб.Формат.ДатаСтр(ДатДок_,Раб.Формат.dfYYYYMMDD)+"#"+RecordToString(Док_);
       if Аннул_:
          tmp2=Раб.Формат.ДатаСтр(ДатАннул_,Раб.Формат.dfYYYYMMDD)+"#"+Раб.Формат.ДатаСтр(ДатДок_,Раб.Формат.dfYYYYMMDD)+"#"+RecordToString(Док_);
       fi;
       ТекГод_=GetFieldS(OWA,n1,"ТекГод");
       if ТекГод_="": ТекГод_=Str(Year(ДатРег_)); fi;
    fi;
    ii=if(Аннул_,2,1);
    if n1=1: OA=OpenArray(OWA,n1,"Расшифр","",aСубФильтр); fi;
    nn2=Records(OA);
    for n2=1..nn2 do
     ВД_=GetFieldS(OA,n2,"ВД");
     КБК_=GetFieldS(OA,n2,"КБК");
     Призн_=Раб.Бюджет2005.СортироватьНаборСлов(GetFieldS(OA,n2,"Призн")," ",True);
     ПризнДоп_=Раб.Бюджет2005.СортироватьНаборСлов(GetFieldS(OA,n2,"ПризнНорм")," ",True);
     ПризнДоп_=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(ПризнДоп_," ","ЛС.*","");
     ПризнОКДП_=GetFieldS(OA,n2,"ОКДП_Призн");
     for i=1..ii do
      if i=1:
         Сум_=GetFieldN(OA,n2,"СумСНДС");
         СумРуб_=GetFieldN(OA,n2,"СумРубСНДС");
        else
         if АннулЧасть_:
            Сум_=-GetFieldN(OA,n2,"Сум_Аннул");
            СумРуб_=-GetFieldN(OA,n2,"СумРуб_Аннул");
           else
            Сум_=-Сум_;
            СумРуб_=-СумРуб_;
         fi;
      fi;
      tmp=Trim(Призн_+" "+ПризнДоп_);
      if inclПризнОКДП=1: ПризнОКДП_=ExtractWords(1,2,ПризнОКДП_,"."); tmp=Trim(tmp+" "+ПризнОКДП_);
        |inclПризнОКДП=2: tmp=Trim(tmp+" "+ПризнОКДП_);
        |True: ПризнОКДП_="";
      fi;
      if spДок:
         Key_=if(i=1,tmp1,tmp2)+"#"+ВД_+"#"+КБК_+"#"+tmp;
        else
         Key_=ВД_+"#"+КБК_+"#"+tmp;
      fi;
      z=SearchInArray(Раб.Договор.LstКлюч,Key_,True);
      if z=-1:
         z=InsertInArraySort(Раб.Договор.LstКлюч,Key_);
         InsertInArray(Раб.Договор.LstКлюч1,z,ВД_+"#"+КБК_+"#"+Призн_);
         InsertInArray(Раб.Договор.LstКарт,z,crdДО);
         InsertInArray(Раб.Договор.LstДок,z,Док_);
         InsertInArray(Раб.Договор.LstНомДок,z,НомДок_);
         InsertInArray(Раб.Договор.LstДатДок,z,ДатДок_);
         InsertInArray(Раб.Договор.LstДатРег,z,if(i=1,ДатРег_,ДатАннул_));
         InsertInArray(Раб.Договор.LstТекст,z,НаимДок_);
         InsertInArray(Раб.Договор.LstАванс,z,Аванс_);
         InsertInArray(Раб.Договор.LstАннул,z,i=2);
         InsertInArray(Раб.Договор.LstТекГод,z,ТекГод_);
         InsertInArray(Раб.Договор.LstВД,z,ВД_);
         InsertInArray(Раб.Договор.LstКБК,z,КБК_);
         InsertInArray(Раб.Договор.LstОбщПризн1,z,ОбщПризн1_);
         InsertInArray(Раб.Договор.LstОбщПризн2,z,ОбщПризн2_);
         InsertInArray(Раб.Договор.LstПризн,z,Призн_);
         InsertInArray(Раб.Договор.LstПризнДоп,z,ПризнДоп_);
         InsertInArray(Раб.Договор.LstПризнОКДП,z,ПризнОКДП_);
         InsertInArray(Раб.Договор.LstСум,z,Сум_);
         InsertInArray(Раб.Договор.LstСумРуб,z,СумРуб_);
        else
         LstСум[z]=LstСум[z]+Сум_;
         LstСумРуб[z]=LstСумРуб[z]+СумРуб_;
      fi; --if z=-1:
     od; --for i=1..ii do
    od; --for n2=1..nn2 do
   od; --for n1=1..nn1 do
   if not nn1=0 and isAlt:
      Вал_=Lo(ВзятьЗначОКВ(GetFieldS(OWA,1,"ОКВ"),"Код","Имя"));
      if Вал_="RUB" or Вал_="": Вал_="руб"; fi;
   fi;
  Finally
   CloseWorkArea(OWA);
  end;
  nn1=LengthOfArray(Раб.Договор.LstКлюч);
  if isAlt and not nn1=0:
     for n1=1..nn1 do
      Призн_=Trim(LstОбщПризн1[n1]+" "+LstОбщПризн2[n1]);
      Призн_=Trim(Призн_+" "+LstПризн[n1]);
      Призн_=Trim(Призн_+" "+LstПризнДоп[n1]);
      if inclПризнОКДП>0: Призн_=Trim(Призн_+" "+LstПризнОКДП[n1]); fi;
      if spДок:
         LstТекст[n1]=DateToString(lstДатРег[n1])+" "+LstТекст[n1]+" №"+lstНомДок[n1]+" от "+DateToString(lstДатДок[n1])+">> "+LstВД[n1]+"  "+LstКБК[n1]+"  {"+Призн_+"}  = "+Format("%.2N",LstСум[n1])+" "+Вал_;
        else
         LstТекст[n1]=LstВД[n1]+"  "+LstКБК[n1]+"  {"+Призн_+"}  = "+Format("%.2N",LstСум[n1])+" "+Вал_;
      fi;
     od;
     if altВсе=1 and nn1=1: altВсе=0; fi;
     if altВсе=1:
        InsertInArray(Раб.Договор.LstТекст,1,"Выбрать все КБК");
     fi;
     n1=Alternate(altЗагл,Раб.Договор.LstТекст,-1,SearchInArray(Раб.Договор.LstКлюч,altЗнач),12);
     if altВсе=1 and n1=1:
        altВсе=-1;
       else
        altВсе=0;
        nn1=n1;
     fi;
  fi;
 Finally
  inclПризнОКДП=0;
 end;
 ^nn1;
end;

Func ДО_Предм(aФильтр:S; aСубФильтр:S; aДК:D; aРежим:S; spДок:L; isAlt:L):I;  --aРежим="ОКДП_Гр" группировка по номенклатурным группам; --aРежим="ОКДП" группировка по кодам ОКДП; aРежим="ТМЦ" группировка по ТМЦ; aРежим="" ОКДП+ТМЦ
var OWA,n1,nn1,z,OA,n2,nn2,ТМЦ16_:I;
var Вал_,ЕдИзм_,ОКДП_Гр_,ОКДП_,Key_:S;
var Кол_,Цена_,Сум_,СумРуб_:N;
var ТМЦ_: Record;
var Аннул_,АннулЧасть_:L;
var ДатАннул_:D;
 Очиститьlst;
 OWA=OpenWorkArea(crdДО,"ДатаДок",aФильтр);
 Try
  nn1=Records(OWA);
  for n1=1..nn1 do
   Аннул_=GetFieldL(OWA,n1,"Аннул");
   if Аннул_: АннулЧасть_=GetFieldL(OWA,n1,"Аннул_Часть"); else АннулЧасть_=False; fi;
   ДатАннул_=GetFieldD(OWA,n1,"Аннул_Дата");
   if Аннул_ and ДатАннул_>aДК and aДК>1.1.100: Аннул_=False; АннулЧасть_=False; fi;
   if n1=1: OA=OpenArray(OWA,n1,"Расшифр","",aСубФильтр); fi;
   if not Аннул_ or АннулЧасть_:
      nn2=Records(OA);
      for n2=1..nn2 do
       ClearVariable(Раб.Договор.idxЗнач);
       ТМЦ_=nil;
       ОКДП_Гр_="";
       ОКДП_="";
       ЕдИзм_="";
       Кол_=0;
       Цена_=0;
       Сум_=GetFieldN(OA,n2,"СумСНДС");
       СумРуб_=GetFieldN(OA,n2,"СумРубСНДС");
       Key_="";
       if aРежим="ОКДП_Гр":
          ОКДП_Гр_=GetFieldS(OA,n2,"ОКДП_Гр");
          Key_=ОКДП_Гр_;
       fi;
       if aРежим="ОКДП" or aРежим="":
          ОКДП_Гр_=GetFieldS(OA,n2,"ОКДП_Гр");
          ОКДП_=GetFieldS(OA,n2,"ОКДП");
          Key_=ОКДП_Гр_+"."+ОКДП_+if(aРежим="","#","");
       fi;
       if aРежим="ТМЦ" or aРежим="":
          ТМЦ_=GetFieldR(OA,n2,"ТМЦ");
          ТМЦ16_=GetFieldI(OA,n2,"ТМЦ16");
          if ТМЦ_=nil:
             idxЗнач[1]=GetFieldS(OA,n2,"Предм1");
             idxЗнач[2]=GetFieldS(OA,n2,"Предм2");
             idxЗнач[3]=GetFieldS(OA,n2,"Предм3");
             idxЗнач[4]=GetFieldS(OA,n2,"Предм4");
             if ТМЦ16_=0:
                ТМЦ16_=Раб.crc16.crc16_(0,idxЗнач[1]);
                ТМЦ16_=Раб.crc16.crc16_(ТМЦ16_,idxЗнач[2]);
                ТМЦ16_=Раб.crc16.crc16_(ТМЦ16_,idxЗнач[3]);
                ТМЦ16_=Раб.crc16.crc16_(ТМЦ16_,idxЗнач[4]);
             fi;
             Key_=Key_+Str(ТМЦ16_)+"#";
             --Key_=Key_+ПолучитьИндекс(4,3)+"#";    --нуно позже заменить на значение crc16?
            else
             idxЗнач[1]=GetFieldS(OA,n2,"ТМЦ.Коммент");
             Key_=Key_+RecordToString(ТМЦ_)+"#";
          fi;
          ЕдИзм_=GetFieldS(OA,n2,"ЕдИзм");
          Кол_=GetFieldN(OA,n2,"Кол")+if(АннулЧасть_,-GetFieldN(OA,n2,"Кол_Аннул"),0);
          Цена_=GetFieldN(OA,n2,"Цена");
          Key_=Key_+Up(ЕдИзм_)+"#"+Format("%.2F",Цена_);
       fi;
       z=SearchInArray(Раб.Договор.LstКлюч,Key_,True);
       if z=-1:
          z=InsertInArraySort(Раб.Договор.LstКлюч,Key_);
          InsertInArray(Раб.Договор.LstТМЦ,z,ТМЦ_);
          InsertInArray(Раб.Договор.LstПредм1,z,idxЗнач[1]);
          InsertInArray(Раб.Договор.LstПредм2,z,idxЗнач[2]);
          InsertInArray(Раб.Договор.LstПредм3,z,idxЗнач[3]);
          InsertInArray(Раб.Договор.LstПредм4,z,idxЗнач[4]);
          InsertInArray(Раб.Договор.LstТМЦ16,z,ТМЦ16_);
          InsertInArray(Раб.Договор.LstОКДП_Гр,z,ОКДП_Гр_);
          InsertInArray(Раб.Договор.LstОКДП,z,ОКДП_);
          InsertInArray(Раб.Договор.LstЕдИзм,z,ЕдИзм_);
          InsertInArray(Раб.Договор.LstКол,z,Кол_);
          InsertInArray(Раб.Договор.LstЦена,z,Цена_);
          InsertInArray(Раб.Договор.LstСум,z,Сум_);
          InsertInArray(Раб.Договор.LstСумРуб,z,СумРуб_);
         else
          LstКол[z]=LstКол[z]+Кол_;
          LstСум[z]=LstСум[z]+Сум_;
          LstСумРуб[z]=LstСумРуб[z]+СумРуб_;
       fi;
      od;
   fi;
  od;
  if not nn1=0:
     Раб.Договор.verОКДП_Гр=GetFieldI(OWA,1,"verОКДП_Гр");
     if isAlt:
        Вал_=Lo(ВзятьЗначОКВ(GetFieldS(OWA,1,"ОКВ"),"Код","Имя"));
        if Вал_="RUB" or Вал_="": Вал_="руб"; fi;
     fi;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 nn1=LengthOfArray(Раб.Договор.LstКлюч);
 if isAlt and not nn1=0:
    for n1=1..nn1 do
     LstТекст[n1]="";
     if aРежим="ОКДП_Гр":
        LstТекст[n1]=Раб.Бюджет.НаимКБК(if(Раб.Договор.verОКДП_Гр=273,"ОКДП_ГР273","ОКДП_ГР"),LstОКДП_Гр[n1]);
        if Length(LstТекст[n1])>118:
           LstТекст[n1]=SubStr(LstТекст[n1],1,118)+"...";
        fi;
        LstТекст[n1]=LstОКДП_Гр[n1]+" --"+LstТекст[n1];
     fi;
     if aРежим="ОКДП" or aРежим="":
        if aРежим="ОКДП":
           LstТекст[n1]=ВзятьЗначОКДП(LstОКДП[n1],"НАИМ");
           if Length(LstТекст[n1])>118:
              LstТекст[n1]=SubStr(LstТекст[n1],1,118)+"...";
           fi;
        fi;
        LstТекст[n1]=Раб.Бюджет2005.Объединить(LstОКДП_Гр[n1],LstОКДП[n1],".")+" "+if(aРежим="ОКДП","--"+LstТекст[n1],"");
     fi;
     if aРежим="ТМЦ" or aРежим="":
        LstТекст[n1]=LstТекст[n1]+SubStr(LstПредм1[n1]+LstПредм2[n1]+LstПредм3[n1]+LstПредм4[n1],1,118);
        if Length(LstПредм1[n1]+LstПредм2[n1]+LstПредм3[n1]+LstПредм4[n1])>118: LstТекст[n1]=LstТекст[n1]+"..."; fi;
     fi;
     if Раб.Договор.LstЦена[n1]=0 or aРежим="ОКДП_Гр" or aРежим="ОКДП":
        LstТекст[n1]=LstТекст[n1]+"  ["+Format("%.2N",LstСум[n1])+" "+Вал_+"]";
       else
        LstТекст[n1]=LstТекст[n1]+"  ["+Format("%.2F",LstКол[n1])+" "+Lo(LstЕдИзм[n1])+"  X  "+Format("%.2N",LstЦена[n1])+" = "+Format("%.2N",LstСум[n1])+" "+Вал_+"]";
     fi;
    od;
    n1=Alternate(altЗагл,Раб.Договор.LstТекст,-1,SearchInArray(Раб.Договор.LstКлюч,altЗнач),12);
    nn1=n1;
 fi;
 ^nn1;
end;

Func Договор_Сум(aФильтр:S; aТекГод:S; isAlt:L):I;
var OWA,n,nn,z:I;
var Сум_:N;
var Вал_,НомДок_,НаимДок_,Key_:S;
var ДатДок_,ДатРег_:D;
var Док_: Record;
 Очиститьlst;
 OWA=OpenWorkArea(crdДоговор_КБК,"ДатаРег",aФильтр);
 Try
  nn=Records(OWA);
  for n=1..nn do
   if n=1:
      Док_=GetFieldR(OWA,n,"Договор");
      НомДок_=GetFieldS(OWA,n,"Договор.НомерДок");
      ДатДок_=GetFieldD(OWA,n,"Договор.ДатаДок");
      ДатРег_=GetFieldD(OWA,n,"Договор.ДатаРег");
      НаимДок_=GetFieldS(OWA,n,"Договор.НаимДок.Наим");
      if aТекГод="":  aТекГод=GetFieldS(OWA,n,"Договор.ТекГод"); fi;
   fi;
   if (aТекГод="" or not GetFieldL(OWA,n,"Договор.Учет_Реестр_ОФК") or GetFieldS(OWA,n,"Договор.ТекГод")=aТекГод) and GetFieldI(OWA,n,"Договор.ver")=0:
      Сум_=GetFieldN(OWA,n,"Сум");
     else
      if aТекГод=GetFieldS(OWA,n,"Год1"): Сум_=GetFieldN(OWA,n,"СумГод1");
        |aТекГод=GetFieldS(OWA,n,"Год2"): Сум_=GetFieldN(OWA,n,"СумГод2");
        |aТекГод=GetFieldS(OWA,n,"Год3"): Сум_=GetFieldN(OWA,n,"СумГод3");
        |aТекГод=GetFieldS(OWA,n,"Год4"): Сум_=GetFieldN(OWA,n,"СумГод4");
        |aТекГод=GetFieldS(OWA,n,"Год5"): Сум_=GetFieldN(OWA,n,"СумГод5");
        |aТекГод=GetFieldS(OWA,n,"Год6"): Сум_=GetFieldN(OWA,n,"СумГод6");
      fi;
   fi;
   Key_=Раб.Формат.ДатаСтр(ДатРег_,Раб.Формат.dfYYYYMMDD)+"#"+Раб.Формат.ДатаСтр(ДатДок_,Раб.Формат.dfYYYYMMDD)+"#"+RecordToString(Док_);
   z=SearchInArray(Раб.Договор.LstКлюч,Key_,True);
   if z=-1:
      z=InsertInArraySort(Раб.Договор.LstКлюч,Key_);
      InsertInArray(Раб.Договор.LstКарт,z,crdДоговор);
      InsertInArray(Раб.Договор.LstДок,z,Док_);
      InsertInArray(Раб.Договор.LstНомДок,z,НомДок_);
      InsertInArray(Раб.Договор.LstДатДок,z,ДатДок_);
      InsertInArray(Раб.Договор.LstДатРег,z,ДатРег_);
      InsertInArray(Раб.Договор.LstТекст,z,НаимДок_);
      InsertInArray(Раб.Договор.LstСум,z,Сум_);
     else
      LstСум[z]=LstСум[z]+Сум_;
   fi;
  od;
  if not nn=0 and isAlt:
     Вал_=Lo(ВзятьЗначОКВ(GetFieldS(OWA,1,"Договор.ОКВ"),"Код","Имя"));
     if Вал_="RUB" or Вал_="": Вал_="руб"; fi;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 nn=LengthOfArray(Раб.Договор.LstКлюч);
 if isAlt and not nn=0:
    for n=1..nn do
     LstТекст[n]=DateToString(lstДатРег[n])+" "+LstТекст[n]+" №"+lstНомДок[n]+" от "+DateToString(lstДатДок[n])+" ="+Format("%.2N",lstСум[n])+" "+Вал_;
    od;
    n=Alternate(altЗагл,Раб.Договор.LstТекст,-1,1,12);
    nn=n;
 fi;
 ^nn;
end;

Func Договор_Кол(aФильтр:S; aРежим:S; isAlt:L):I;
var OWA,n,nn,z:I;
var Кол_,Сум_:N;
var ЕдИзм_,НомДок_,НаимДок_,Вал_,Key_:S;
var ДатДок_:D;
var Док_: Record;
 Очиститьlst;
 OWA=OpenWorkArea(crdДоговор_ТМЦ,"ДатаРег",aФильтр);
 Try
  nn=Records(OWA);
  for n=1..nn do
   Док_=GetFieldR(OWA,n,"Договор");
   НомДок_=GetFieldS(OWA,n,"Договор.НомерДок");
   ДатДок_=GetFieldD(OWA,n,"Договор.ДатаДок");
   НаимДок_=GetFieldS(OWA,n,"Договор.НаимДок.Наим");
   Кол_=GetFieldN(OWA,n,"Кол");
   ЕдИзм_=GetFieldS(OWA,n,"ЕдИзм");
   Сум_=GetFieldN(OWA,n,"Сум");
   Key_=Раб.Формат.ДатаСтр(GetFieldD(OWA,n,"ДатаРег"),Раб.Формат.dfYYYYMMDD)+"#"+Раб.Формат.ДатаСтр(ДатДок_,Раб.Формат.dfYYYYMMDD)+"#"+RecordToString(Док_);
   z=SearchInArray(Раб.Договор.LstКлюч,Key_,True);
   if z=-1:
      z=InsertInArraySort(Раб.Договор.LstКлюч,Key_);
      InsertInArray(Раб.Договор.LstКарт,z,crdДоговор);
      InsertInArray(Раб.Договор.LstДок,z,Док_);
      InsertInArray(Раб.Договор.LstНомДок,z,НомДок_);
      InsertInArray(Раб.Договор.LstДатДок,z,ДатДок_);
      InsertInArray(Раб.Договор.LstТекст,z,НаимДок_);
      InsertInArray(Раб.Договор.LstКол,z,Кол_);
      InsertInArray(Раб.Договор.LstЕдИзм,z,ЕдИзм_);
      InsertInArray(Раб.Договор.LstСум,z,Сум_);
     else
      LstКол[z]=LstКол[z]+Кол_;
      LstСум[z]=LstСум[z]+Сум_;
   fi;
  od;
  if not nn=0 and isAlt:
     Вал_=Lo(ВзятьЗначОКВ(GetFieldS(OWA,1,"Договор.ОКВ"),"Код","Имя"));
     if Вал_="RUB" or Вал_="": Вал_="руб"; fi;
  fi;

 Finally
  CloseWorkArea(OWA);
 end;
 nn=LengthOfArray(Раб.Договор.LstКлюч);
 if isAlt and not nn=0:
    for n=1..nn do
     LstТекст[n]=LstТекст[n]+" №"+lstНомДок[n]+" от "+DateToString(lstДатДок[n])+" =";
     if aРежим="Сум":
        LstТекст[n]=LstТекст[n]+Format("%.2N",lstСум[n])+" "+Вал_;
       else
        LstТекст[n]=LstТекст[n]+Format("%.2N",lstКол[n])+" "+Lo(lstЕдИзм[n]);
     fi;
    od;
    n=Alternate(altЗагл,Раб.Договор.LstТекст,-1,1,12);
    nn=n;
 fi;
 ^nn;
end;

Func ДО_СумКол(aФильтр:S; aСубФильтр:S; aДК:D; aРежим:S; isAlt:L):I;
var OWA,n1,nn1,OA,n2,nn2,z,i,ii:i;
var Док_: Record;
var Вал_,НомДок_,НаимДок_:S;
var ДатДок_,ДатРег_,ДатАннул_:D;
var Сум_,СумРуб_:N;
var Аннул_,АннулЧасть_:L;
 Очиститьlst;
 OWA=OpenWorkArea(CrdДО,"ДатаРег;ДатаДок;НомерДок",aФильтр);
 Try
  nn1=Records(OWA);
  z=0;
  for n1=1..nn1 do
   Док_=GetRecordKey(OWA,n1);
   НомДок_=GetFieldS(OWA,n1,"НомерДок");
   ДатДок_=GetFieldD(OWA,n1,"ДатаДок");
   ДатРег_=GetFieldD(OWA,n1,"ДатаРег");
   НаимДок_=GetFieldS(OWA,n1,"НаимДок.Наим");
   Аннул_=GetFieldL(OWA,n1,"Аннул");
   АннулЧасть_=GetFieldL(OWA,n1,"Аннул_Часть");
   ДатАннул_=GetFieldD(OWA,n1,"Аннул_Дата");
   if Аннул_ and ДатАннул_>aДК and aДК>1.1.100: Аннул_=False; fi;
   ii=if(Аннул_,2,1);
   if aСубФильтр="" and not aРежим="Кол":
      for i=1..ii do
       if i=1:
          Сум_=GetFieldN(OWA,n1,"СумДок");
          СумРуб_=GetFieldN(OWA,n1,"СумРубДок");
         else
          if АннулЧасть_:
             Сум_=-GetFieldN(OWA,n1,"СумДок_Аннул");
             СумРуб_=-GetFieldN(OWA,n1,"СумРубДок_Аннул");
            else
             Сум_=-Сум_;
             СумРуб_=-СумРуб_;
          fi;
       fi;
       z=z+1;
       lstКарт[z]=CrdДО;
       lstДок[z]=Док_;
       lstНомДок[z]=НомДок_;
       lstДатДок[z]=ДатДок_;
       lstТекст[z]=НаимДок_;
       lstДатРег[z]=if(i=1,ДатРег_,ДатАннул_);
       lstАннул[z]=i=2;
       lstСум[z]=Сум_;
       lstСумРуб[z]=СумРуб_;
      od;
     else
      if n1=1: OA=OpenArray(OWA,n1,"Расшифр","",aСубФильтр); fi;
      nn2=Records(OA);
      if not nn2=0:
         for i=1..ii do
          z=z+1;
          lstКарт[z]=CrdДО;
          lstДок[z]=Док_;
          lstНомДок[z]=НомДок_;
          lstДатДок[z]=ДатДок_;
          lstДатРег[z]=if(i=1,ДатРег_,ДатАннул_);
          lstАннул[z]=i=2;
          lstТекст[z]=НаимДок_;
          if i=1:
             for n2=1..nn2 do
              lstСум[z]=lstСум[z]+GetFieldN(OA,n2,"СумСНДС");
              lstСумРуб[z]=lstСумРуб[z]+GetFieldN(OA,n2,"СумРубСНДС");
              lstКол[z]=lstКол[z]+GetFieldN(OA,n2,"Кол");
             od;
             lstЕдИзм[z]=GetFieldS(OA,1,"ЕдИзм");
            else
             if АннулЧасть_:
                for n2=1..nn2 do
                 lstСум[z]=lstСум[z]+(-GetFieldN(OA,n2,"Сум_Аннул"));
                 lstСумРуб[z]=lstСумРуб[z]+(-GetFieldN(OA,n2,"СумРуб_Аннул"));
                 lstКол[z]=lstКол[z]+(-GetFieldN(OA,n2,"Кол_Аннул"));
                od;
               else
                lstСум[z]=-lstСум[z-1];
                lstСумРуб[z]=-lstСумРуб[z-1];
                lstКол[z]=-lstКол[z-1];
             fi;
             lstЕдИзм[z]=lstЕдИзм[z-1];
          fi;
         od;
      fi;
   fi;
  od;
  if not nn1=0 and isAlt and not aРежим="Кол":
     Вал_=Lo(ВзятьЗначОКВ(GetFieldS(OWA,1,"ОКВ"),"Код","Имя"));
     if Вал_="RUB" or Вал_="": Вал_="руб"; fi;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
 nn1=z;
 if isAlt and not nn1=0:
    for n1=1..nn1 do
     LstТекст[n1]=DateToString(lstДатРег[n1])+" "+LstТекст[n1]+" №"+lstНомДок[n1]+" от "+DateToString(lstДатДок[n1])+" =";
     if aРежим="Кол":
        LstТекст[n1]=LstТекст[n1]+Format("%.2N",lstКол[n1])+" "+Lo(lstЕдИзм[n1]);
       else
        LstТекст[n1]=LstТекст[n1]+Format("%.2N",lstСум[n1])+" "+Вал_;
     fi;
    od;
    n1=Alternate(altЗагл,Раб.Договор.LstТекст,-1,1,12);
    nn1=n1;
 fi;
 ^nn1;
end;

Func MyTurn(Val:S; Д1:D; Д2:D; Вал:S):N;
var Res:N;
 Try
  Res=Turn(Val,Д1,Д2,Вал);
 Except
  Res=0;
 end;
 ^Res;
end;

Proc ДО_Оплата_Шаг2(t:I; tДат:D; tСум:N; tСумРуб:N; tКарт:S; tДок:Record);
var НомДок,НаимДок,Ключ:S;
var ДатДок:D;
var z:I;
 if tКарт="Table_OPER" or tДок=nil:
    tКарт="";
    tДок=IntegerToRecord(t);
    НомДок=Str(t);
    ДатДок=tДат;
    НаимДок="Журнал хоз. операций, проводка";
   else
    НомДок=Раб.ИмяПолеКарт.ЗначПоляС(tКарт,"Номер",tДок);
    ДатДок=Раб.ИмяПолеКарт.ЗначПоляД(tКарт,"Дата",tДок);
    НаимДок=Раб.ИмяПолеКарт.ИмяДокумента(tКарт);
 fi;
 Ключ=Раб.Формат.ДатаСтр(tДат,Раб.Формат.dfYYYYMMDD)+"#"+Раб.Формат.ДатаСтр(ДатДок,Раб.Формат.dfYYYYMMDD)+"#"+tКарт+"#"+RecordToString(tДок);
 z=SearchInArray(Раб.Договор.LstКлюч,Ключ,True);
 if z=-1:
    z=InsertInArraySort(Раб.Договор.LstКлюч,Ключ);
    InsertInArray(Раб.Договор.LstКарт,z,tКарт);
    InsertInArray(Раб.Договор.LstДок,z,tДок);
    InsertInArray(Раб.Договор.LstНомДок,z,НомДок);
    InsertInArray(Раб.Договор.LstДатДок,z,ДатДок);
    InsertInArray(Раб.Договор.LstДатРег,z,tДат);
    InsertInArray(Раб.Договор.LstТекст,z,НаимДок);
    InsertInArray(Раб.Договор.LstСум,z,tСум);
    InsertInArray(Раб.Договор.LstСумРуб,z,tСумРуб);
   else
    LstСум[z]=LstСум[z]+tСум;
    LstСумРуб[z]=LstСумРуб[z]+tСумРуб;
 fi;
end;

Proc ДО_Оплата_Шаг1(t:I; Призн_:S; isВал:L);
var tДеб,tКре,tПризн,tКарт:S;
var tСум,tСумРуб,k,p1,p2:N;
var tДат:D;
var tДок:Record;
 tКарт=TransCardFile(t);
 tДок=TransRecord(t);
 if not tКарт="":
    if exclОплКарт=tКарт and exclОплДок=tДок: Exit; fi;
 fi;
 tДат=TransDate(t);
 if isВал:
    tСум=TransSum(t,"ВАЛ");
    tСумРуб=TransSum(t);
   else
    tСум=TransSum(t);
    tСумРуб=0;
 fi;
 tДеб=TransDeb(t);
 tКре=TransCre(t);
 if  Pos("ЗАБ.КР",tКре)>1 and Pos("3.ЗАБ.КР",tКре)=0: k=1;
    |Match(tДеб,"*.?.302.??.830"):
     k=1;
     if Match(tКре,"*.?.302.??.830"):
        tПризн=TransSigns(t);
        p1=Pos("+"+Призн_,tПризн);
        p2=Pos("-"+Призн_,tПризн);
        if p1>0 and p2>0: k=0;
          |p1>0: k= 1;
          |p2>0: k=-1;
        fi;
     fi;
    |Match(tДеб,"*.?.206.??.560"):
     k=1;
     if Match(tКре,"*.?.206.??.560"):
        tПризн=TransSigns(t);
        p1=Pos("+"+Призн_,tПризн);
        p2=Pos("-"+Призн_,tПризн);
        if p1>0 and p2>0: k=0;
          |p1>0: k= 1;
          |p2>0: k=-1;
        fi;
     fi;
    |Match(tКре,"*.?.302.??.830"): k=-1;
    |Match(tКре,"*.?.206.??.560"): k=-1;
    |Match(tКре,"*.?.206.??.660"): k=-1;
    |true: Exit;
 fi;
 ДО_Оплата_Шаг2(t,tДат,tСум*k,tСумРуб*k,tКарт,tДок);
end;

Func ДО_Оплата(aДО:Record; aДата:D; aМаскаВД:S; aМаскаКБК:S; aУслПризн:S; spДок:L; isAlt:L; aRefresh:L):I;
var OWA,n,nn,t:I;
var ПризнДО_,ТипКБК_,Вал_,ВД_,БК_,КОСГУ_,Призн_,Сч_,СчАн_,УслСч_:S;
var Сум_,СумРуб_:N;
var isВал,isАванс:L;
 Try
  Очиститьlst;
  if aДО=nil: ^0; fi;
  ClearVariable(Раб.Договор.Buf);
  OWA=OpenWorkArea(crdДО,"","UKey="+RecordToString(aДО));
  Try
   if Records(OWA)=0: ^0; fi;
   Вал_=GetFieldS(OWA,1,"Вал");
   isВал=(not Вал_=BaseCurrency);
   isАванс=GetFieldL(OWA,1,"Аванс");
  Finally
   CloseWorkArea(OWA);
  end;
  if aRefresh: Refresh(False,aДата+1); fi;
  ПризнДО_=CardFileRecSign(crdДО,"Признак","ДОГОВОР",aДО);
  if ПризнДО_="ДОГОВОР.": ^0; fi;
  if Pos(ПризнДО_,aУслПризн)=0:
     Призн_=Раб.Бюджет2005.Объединить(ПризнДО_,aУслПризн,"&");
    else
     Призн_=aУслПризн;
  fi;
  if aМаскаВД="" or aМаскаВД="*": ВД_="?"; else ВД_=aМаскаВД; fi;
  if aМаскаКБК="" or aМаскаКБК="*":
     БК_="*";
     КОСГУ_="*";
     ТипКБК_="";
     Сч_=if(isАванс,"*."+ВД_+".206.??.560","*."+ВД_+".302.??.830");
     СчАн_="??";
    else
     ТипКБК_=Раб.Бюджет2005.ТипКБКСчета(aМаскаКБК);
     БК_=SubStr(aМаскаКБК,1,Length(aМаскаКБК)-4);
     КОСГУ_=SubStr(aМаскаКБК,Length(aМаскаКБК)-2,3);
     if isАванс:
        СчАн_=Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_);
        Сч_=БК_+"."+ВД_+".206."+СчАн_+".560";
       else
        СчАн_=Раб.Бюджет2005.Соотв_КОСГУ_Ан("302",КОСГУ_);
        Сч_=БК_+"."+ВД_+".302."+СчАн_+".830";
     fi;
  fi;
  if spДок:
     if not skipИмяПолеКарт: Раб.ИмяПолеКарт.Начать; fi;
     Try
      --Смотрим оплату по балансу
      Try
       if (exclЗачетАв and not isАванс) or exclЗачет:
          УслСч_=if(exclЗачетАв and not isАванс,"*.?.206.??.660","");
          if exclЗачет:
             УслСч_=Раб.Бюджет2005.Объединить(УслСч_,Сч_,"|");
          fi;
          УслСч_=Сч_+"/~("+УслСч_+")";
         else
          УслСч_=Сч_;
       fi;
       if ExistsTransactions(УслСч_+"{"+Призн_+"}",1.1.100,aДата+1):
          for Transaction t=УслСч_+"{"+Призн_+"}",1.1.100,aДата+1 do
           ДО_Оплата_Шаг1(t,ПризнДО_,isВал);
          od;
       fi;
      Except
      end;
      --Смотрим оплату по забалансу
      if not exclЗКР:
         УслСч_=БК_+"."+ВД_+".ЗАБ.КР."+КОСГУ_+if(КОСГУ_="???" or КОСГУ_="*","&~(*.510|*.610)","")+"&~*.3.???.??.*";
         Try
          if ExistsTransactions(УслСч_+"{"+Призн_+"}",1.1.100,aДата+1):
             for Transaction t=УслСч_+"{"+Призн_+"}",1.1.100,aДата+1 do
              ДО_Оплата_Шаг1(t,ПризнДО_,isВал);
             od;
          fi;
         Except
         end;
         УслСч_="(*."+ВД_+".ЗАБ.КР.510|*."+ВД_+".ЗАБ.КР.610)&~*.3.???.??.*";
         if not ТипКБК_="":
            Призн_=Раб.Бюджет2005.Объединить(Призн_,ТипКБК_+"."+БК_+"&КОСГУ."+КОСГУ_+"!","&");
         fi;
         Try
          if ExistsTransactions(УслСч_+"{"+Призн_+"}",1.1.100,aДата+1):
             for Transaction t=УслСч_+"{"+Призн_+"}",1.1.100,aДата+1 do
              ДО_Оплата_Шаг1(t,ПризнДО_,isВал);
             od;
          fi;
         Except
         end;
      fi;
     Finally
      if not skipИмяПолеКарт: Раб.ИмяПолеКарт.Закончить; fi;
     end;
    else
     --Смотрим оплату по балансу
     if (exclЗачетАв and not isАванс) or exclЗачет:
        УслСч_=if(exclЗачетАв and not isАванс,"*.?.206.??.660","");
        if exclЗачет:
           УслСч_=Раб.Бюджет2005.Объединить(УслСч_,Сч_,"|");
        fi;
        УслСч_=Сч_+"/~("+УслСч_+")";
       else
        УслСч_=Сч_;
     fi;
     Сум_=MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",1.1.100,aДата+1,Вал_);
     if isВал: СумРуб_=MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",1.1.100,aДата+1,"РУБ"); else СумРуб_=0; fi;
     --Смотрим оплату по забалансу
     if not exclЗКР:
        УслСч_=БК_+"."+ВД_+".ЗАБ.КР."+КОСГУ_+if(КОСГУ_="???" or КОСГУ_="*","&~(*.510|*.610)","")+"&~*.3.???.??.*";
        Сум_=Сум_+(-MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",1.1.100,aДата+1,Вал_));
        if isВал: СумРуб_=-MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",1.1.100,aДата+1,"РУБ"); fi;
        УслСч_="(*."+ВД_+".ЗАБ.КР.510|*."+ВД_+".ЗАБ.КР.610)&~*.3.???.??.*";
        if not ТипКБК_="":
           Призн_=Раб.Бюджет2005.Объединить(Призн_,ТипКБК_+"."+БК_+"&КОСГУ."+КОСГУ_+"!","&");
        fi;
        Сум_=Сум_+(-MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",1.1.100,aДата+1,Вал_));
        if isВал: СумРуб_=СумРуб_+(-MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",1.1.100,aДата+1,"РУБ")); fi;
     fi;
     if not Сум_=0:
        LstКлюч[1]=ПризнДО_;
        LstСум[1]=Сум_;
        LstСумРуб[1]=СумРуб_;
     fi;
  fi; --if spДок:
  --
  nn=LengthOfArray(Раб.Договор.LstКлюч);
  if isAlt:
     if nn=0:
        nn=-1;
       else
        for n=1..nn do
         if spДок:
            LstТекст[n]=DateToString(lstДатРег[n])+"  "+LstТекст[n]+" №"+lstНомДок[n]+" от "+DateToString(lstДатДок[n])+">> "+Format("%.2N",LstСум[n])+" "+Вал_;
           else
            LstТекст[n]=Format("%.2N",LstСум[n])+" "+Вал_;
         fi;
        od;
        nn=Alternate(altЗагл,Раб.Договор.LstТекст,-1,SearchInArray(Раб.Договор.LstКлюч,altЗнач),12);
     fi;
  fi;
 Finally
  exclОплКарт="";
  exclОплДок=nil;
  exclЗКР=False;
  exclЗачетАв=False;
  exclЗачет=False;
  skipИмяПолеКарт=False;
 end;
 ^nn;
end;

Func ДО_ЗачетАванса(aДО:Record; aДата:D; aМаскаВД:S; aМаскаКБК:S; aУслПризн:S; spДок:L; isAlt:L; aRefresh:L):I;
var OWA,n,nn,t:I;
var ПризнДО_,Вал_,ВД_,БК_,КОСГУ_,Призн_,УслСч_:S;
var Сум_,СумРуб_:N;
var isВал,isАванс:L;
 Try
  Очиститьlst;
  if aДО=nil: ^0; fi;
  ClearVariable(Раб.Договор.Buf);
  OWA=OpenWorkArea(crdДО,"","UKey="+RecordToString(aДО));
  Try
   if Records(OWA)=0: ^0; fi;
   Вал_=GetFieldS(OWA,1,"Вал");
   isВал=(not Вал_=BaseCurrency);
   isАванс=GetFieldL(OWA,1,"Аванс");
  Finally
   CloseWorkArea(OWA);
  end;
  if aRefresh: Refresh(False,aДата+1); fi;
  ПризнДО_=CardFileRecSign(crdДО,"Признак","ДОГОВОР",aДО);
  if ПризнДО_="ДОГОВОР.": ^0; fi;
  if Pos(ПризнДО_,aУслПризн)=0:
     Призн_=Раб.Бюджет2005.Объединить(ПризнДО_,aУслПризн,"&");
    else
     Призн_=aУслПризн;
  fi;
  if aМаскаВД="" or aМаскаВД="*": ВД_="?"; else ВД_=aМаскаВД; fi;
  if aМаскаКБК="" or aМаскаКБК="*":
     БК_="*";
     КОСГУ_="*";
     --УслСч_="+*/"+БК_+"."+ВД_+".206.??.660";
     УслСч_=if(isАванс,"+*/"+БК_+"."+ВД_+".206.??.660","+"+БК_+"."+ВД_+".*/*.?.206.??.660");
    else
     БК_=SubStr(aМаскаКБК,1,Length(aМаскаКБК)-4);
     КОСГУ_=SubStr(aМаскаКБК,Length(aМаскаКБК)-2,3);
     --УслСч_="+*/"+БК_+"."+ВД_+".206."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_)+".660";
     УслСч_=if(isАванс,"+*/"+БК_+"."+ВД_+".206."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_)+".660","+"+БК_+"."+ВД_+".*/*.?.206.??.660");
  fi;
  Призн_=if(isАванс,"*/"+Призн_,Призн_+"/*");
  if spДок:
     if not skipИмяПолеКарт: Раб.ИмяПолеКарт.Начать; fi;
     Try
      Try
       if ExistsTransactions(УслСч_+"{"+Призн_+"}",1.1.100,aДата+1):
          for Transaction t=УслСч_+"{"+Призн_+"}",1.1.100,aДата+1 do
           ДО_Оплата_Шаг1(t,ПризнДО_,isВал);
          od;
       fi;
      Except
      end;
     Finally
      if not skipИмяПолеКарт: Раб.ИмяПолеКарт.Закончить; fi;
     end;
    else
     Сум_=MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",1.1.100,aДата+1,Вал_);
     if isВал: СумРуб_=MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",1.1.100,aДата+1,"РУБ"); else СумРуб_=0; fi;
     if not Сум_=0:
        LstКлюч[1]=ПризнДО_;
        LstСум[1]=Сум_;
        LstСумРуб[1]=СумРуб_;
     fi;
  fi; --if spДок:
  --
  nn=LengthOfArray(Раб.Договор.LstКлюч);
  if isAlt:
     if nn=0:
        nn=-1;
       else
        for n=1..nn do
         if spДок:
            LstТекст[n]=DateToString(lstДатРег[n])+"  "+LstТекст[n]+" №"+lstНомДок[n]+" от "+DateToString(lstДатДок[n])+">> "+Format("%.2N",LstСум[n])+" "+Вал_;
           else
            LstТекст[n]=Format("%.2N",LstСум[n])+" "+Вал_;
         fi;
        od;
        nn=Alternate(altЗагл,Раб.Договор.LstТекст,-1,SearchInArray(Раб.Договор.LstКлюч,altЗнач),12);
     fi;
  fi;
 Finally
  exclОплКарт="";
  exclОплДок=nil;
  skipИмяПолеКарт=False;
 end;
 ^nn;
end;

Func Договор_Оплата(aДоговор:Record; aДН:D; aДК:D; aМаскаВД:S; aМаскаКБК:S; aУслПризн:S; aВид:I; spДок:L; isAlt:L; aRefresh:L):I;
var t,n,nn:I;
var ПризнДоговор_,ТипКБК_,Вал_,ВД_,БК_,КОСГУ_,Призн_,Сч_,УслСч_:S;
var Сум_,СумРуб_:N;
var isВал:L;
var RecSig:Record;
 Try
  Очиститьlst;
  if aДоговор=nil: ^0; fi;
  Вал_=if(ВалОпл="",BaseCurrency,ВалОпл);
  isВал=(not Вал_=BaseCurrency);
  ClearVariable(Раб.Договор.Buf);
  if aRefresh: Refresh(False,aДК+1); fi;
  RecSig=GetCardFieldR(Раб.Договор.crdДоговор,aДоговор,"Признак_Ref");
  if RecSig=nil:
     --"Старый" признак
     ПризнДоговор_="ДОГОВОР."+GetCardFieldS(crdДоговор,aДоговор,"Признак");
    else
     ПризнДоговор_=CardFileRecSign(GetCardFileByRefField(Раб.Договор.crdДоговор,"Признак_Ref"),"Признак","ДОГОВОР",RecSig);
  fi;
  if ПризнДоговор_="ДОГОВОР.": ^0; fi;
  if Pos(Призн_,aУслПризн)=0:
     Призн_=Раб.Бюджет2005.Объединить(ПризнДоговор_+"!",aУслПризн,"&");
    else
     Призн_=aУслПризн;
  fi;
  if aМаскаВД="" or aМаскаВД="*": ВД_="?"; else ВД_=aМаскаВД; fi;
  if aМаскаКБК="" or aМаскаКБК="*":
     БК_="*";
     КОСГУ_="*";
     ТипКБК_="";
     if aВид= 1: Сч_="*."+ВД_+".206.??.560";
       |aВид=-1: Сч_="*."+ВД_+".302.??.830";
       |true   : Сч_="*."+ВД_+".206.??.560|*."+ВД_+".302.??.830";
     fi;
    else
     ТипКБК_=Раб.Бюджет2005.ТипКБКСчета(aМаскаКБК);
     БК_=SubStr(aМаскаКБК,1,Length(aМаскаКБК)-4);
     КОСГУ_=SubStr(aМаскаКБК,Length(aМаскаКБК)-2,3);
     if aВид= 1: Сч_=БК_+"."+ВД_+".206."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_)+".560";
       |aВид=-1: Сч_=БК_+"."+ВД_+".302."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("302",КОСГУ_)+".830";
       |true   : Сч_=БК_+"."+ВД_+".206."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_)+".560|"+БК_+"."+ВД_+".302."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("302",КОСГУ_)+".830";
     fi;
  fi;
  if spДок:
     if not skipИмяПолеКарт: Раб.ИмяПолеКарт.Начать; fi;
     Try
      --Смотрим оплату по балансу
      Try
       if (exclЗачетАв and not aВид=1) or exclЗачет:
          УслСч_=if(exclЗачетАв and not aВид=1,"*.?.206.??.660","");
          if exclЗачет:
             УслСч_=Раб.Бюджет2005.Объединить(УслСч_,Сч_,"|");
          fi;
          УслСч_=Сч_+"/~("+УслСч_+")";
         else
          УслСч_=Сч_;
       fi;
       if ExistsTransactions(УслСч_+"{"+Призн_+"}",aДН,aДК+1):
          for Transaction t=УслСч_+"{"+Призн_+"}",aДН,aДК+1 do
           ДО_Оплата_Шаг1(t,ПризнДоговор_,isВал);
          od;
       fi;
      Except
      end;
      --Смотрим оплату по забалансу
      if not exclЗКР:
         УслСч_=if(aВид=1:"*.560/"|aВид=-1:"*.830/"|True:"")+БК_+"."+ВД_+".ЗАБ.КР."+КОСГУ_+if(КОСГУ_="???" or КОСГУ_="*","&~(*.510|*.610)","")+"&~*.3.???.??.*";
         Try
          if ExistsTransactions(УслСч_+"{"+Призн_+"}",aДН,aДК+1):
             for Transaction t=УслСч_+"{"+Призн_+"}",aДН,aДК+1 do
              ДО_Оплата_Шаг1(t,ПризнДоговор_,isВал);
             od;
          fi;
         Except
         end;
         УслСч_=if(aВид=1:"*.560/"|aВид=-1:"*.830/"|True:"")+"(*."+ВД_+".ЗАБ.КР.510|*."+ВД_+".ЗАБ.КР.610)"+"&~*.3.???.??.*";
         if not ТипКБК_="":
            Призн_=Раб.Бюджет2005.Объединить(Призн_,ТипКБК_+"."+БК_+"&КОСГУ."+КОСГУ_+"!","&");
         fi;
         Try
          if ExistsTransactions(УслСч_+"{"+Призн_+"}",aДН,aДК+1):
             for Transaction t=УслСч_+"{"+Призн_+"}",aДН,aДК+1 do
              ДО_Оплата_Шаг1(t,ПризнДоговор_,isВал);
             od;
          fi;
         Except
         end;
      fi;
     Finally
      if not skipИмяПолеКарт: Раб.ИмяПолеКарт.Закончить; fi;
     end;
    else
     --Смотрим оплату по балансу
     if (exclЗачетАв and not aВид=1) or exclЗачет:
        УслСч_=if(exclЗачетАв and not aВид=1,"*.?.206.??.660","");
        if exclЗачет:
           УслСч_=Раб.Бюджет2005.Объединить(УслСч_,Сч_,"|");
        fi;
        УслСч_=Сч_+"/~("+УслСч_+")";
       else
        УслСч_=Сч_;
     fi;
     Сум_=MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",aДН,aДК+1,Вал_);
     if isВал: СумРуб_=MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",aДН,aДК+1,"РУБ"); else СумРуб_=0; fi;
     --Смотрим оплату по забалансу
     if not exclЗКР:
        УслСч_=БК_+"."+ВД_+".ЗАБ.КР."+КОСГУ_+if(КОСГУ_="???" or КОСГУ_="*","&~(*.510|*.610)","")+if(aВид=1:"/*.560"|aВид=-1:"/*.830"|True:"")+"&~*.3.???.??.*";
        Сум_=Сум_+(-MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",aДН,aДК+1,Вал_));
        if isВал: СумРуб_=-MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",aДН,aДК+1,"РУБ"); fi;
        УслСч_="*."+ВД_+".ЗАБ.КР.510|*."+ВД_+".ЗАБ.КР.610"+if(aВид=1:"/*.560"|aВид=-1:"/*.830"|True:"")+"&~*.3.???.??.*";
        if not ТипКБК_="":
           Призн_=Раб.Бюджет2005.Объединить(Призн_,ТипКБК_+"."+БК_+"&КОСГУ."+КОСГУ_+"!","&");
        fi;
        Сум_=Сум_+(-MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",aДН,aДК+1,Вал_));
        if isВал: СумРуб_=СумРуб_+(-MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",aДН,aДК+1,"РУБ")); fi;
     fi;
     if not Сум_=0:
        LstКлюч[1]=ПризнДоговор_+"!";
        LstСум[1]=Сум_;
        LstСумРуб[1]=СумРуб_;
     fi;
  fi; --if spДок:
  --
  nn=LengthOfArray(Раб.Договор.LstКлюч);
  if isAlt:
     if nn=0:
        nn=-1;
       else
        for n=1..nn do
         if spДок:
            LstТекст[n]=DateToString(lstДатРег[n])+"  "+LstТекст[n]+" №"+lstНомДок[n]+" от "+DateToString(lstДатДок[n])+">> "+Format("%.2N",LstСум[n])+" "+Вал_;
           else
            LstТекст[n]=Format("%.2N",LstСум[n])+" "+Вал_;
         fi;
        od;
        nn=Alternate(altЗагл,Раб.Договор.LstТекст,-1,SearchInArray(Раб.Договор.LstКлюч,altЗнач),12);
     fi;
  fi;
 Finally
  exclОплКарт="";
  exclОплДок=nil;
  exclЗКР=False;
  exclЗачетАв=False;
  exclЗачет=False;
  skipИмяПолеКарт=False;
 end;
 ^nn;
end;

Func Договор_ЗачетАванса(aДоговор:Record; aДН:D; aДК:D; aМаскаВД:S; aМаскаКБК:S; aУслПризн:S; isАванс:L; spДок:L; isAlt:L; aRefresh:L):I;
var n,nn,t:I;
var ПризнДоговор_,Вал_,ВД_,БК_,КОСГУ_,Призн_,УслСч_:S;
var Сум_,СумРуб_:N;
var isВал:L;
var RecSig:Record;
 Try
  Очиститьlst;
  if aДоговор=nil: ^0; fi;
  ClearVariable(Раб.Договор.Buf);
  Вал_=if(ВалОпл="",BaseCurrency,ВалОпл);
  isВал=(not Вал_=BaseCurrency);
  if aRefresh: Refresh(False,aДК+1); fi;
  RecSig=GetcardFieldR(Раб.Договор.crdДоговор,aДоговор,"Признак_Ref");
  if RecSig=nil:
     --"Старый" признак
     ПризнДоговор_="ДОГОВОР."+GetCardFieldS(crdДоговор,aДоговор,"Признак");
    else
     ПризнДоговор_=CardFileRecSign(GetCardFileByRefField(Раб.Договор.crdДоговор,"Признак_Ref"),"Признак","ДОГОВОР",RecSig);
  fi;
  if ПризнДоговор_="ДОГОВОР.": ^0; fi;
  if Pos(ПризнДоговор_,aУслПризн)=0:
     Призн_=Раб.Бюджет2005.Объединить(ПризнДоговор_+"!",aУслПризн,"&");
    else
     Призн_=aУслПризн;
  fi;
  if aМаскаВД="" or aМаскаВД="*": ВД_="?"; else ВД_=aМаскаВД; fi;
  if aМаскаКБК="" or aМаскаКБК="*":
     БК_="*";
     КОСГУ_="*";
     --УслСч_="+*/"+БК_+"."+ВД_+".206.??.660";
     if exclСписанАв:
        УслСч_=if(isАванс,"+*.?.302.??.*/"+БК_+"."+ВД_+".206.??.660","+"+БК_+"."+ВД_+".302.??.*/*.?.206.??.660");
       |exclЗачетАв:
        УслСч_="+~*.?.302.??.*/"+БК_+"."+ВД_+".206.??.660";
       |True:
        УслСч_=if(isАванс,"+*/"+БК_+"."+ВД_+".206.??.660","+"+БК_+"."+ВД_+".*/*.?.206.??.660");
     fi;
    else
     БК_=SubStr(aМаскаКБК,1,Length(aМаскаКБК)-4);
     КОСГУ_=SubStr(aМаскаКБК,Length(aМаскаКБК)-2,3);
     --УслСч_="+*/"+БК_+"."+ВД_+".206."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_)+".660";
     if exclСписанАв:
        УслСч_=if(isАванс,"+*.?.302.??.*/"+БК_+"."+ВД_+".206."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_)+".660","+"+БК_+"."+ВД_+".302.??.*/*.?.206.??.660");
       |exclЗачетАв:
        УслСч_="+~*.?.302.??.*/"+БК_+"."+ВД_+".206."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_)+".660";
       |True:
        УслСч_=if(isАванс,"+*/"+БК_+"."+ВД_+".206."+Раб.Бюджет2005.Соотв_КОСГУ_Ан("206",КОСГУ_)+".660","+"+БК_+"."+ВД_+".*/*.?.206.??.660");
     fi;
  fi;
  Призн_=if(isАванс,"*/"+Призн_,Призн_+"/*");
  if spДок:
     if not skipИмяПолеКарт: Раб.ИмяПолеКарт.Начать; fi;
     Try
      Try
       if ExistsTransactions(УслСч_+"{"+Призн_+"}",aДН,aДК+1):
          for Transaction t=УслСч_+"{"+Призн_+"}",aДН,aДК+1 do
           ДО_Оплата_Шаг1(t,ПризнДоговор_,isВал);
          od;
       fi;
      Except
      end;
     Finally
      if not skipИмяПолеКарт: Раб.ИмяПолеКарт.Закончить; fi;
     end;
    else
     Сум_=MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",aДН,aДК+1,Вал_);
     if isВал: СумРуб_=MyTurn(УслСч_+"'"+Вал_+"{"+Призн_+"}",aДН,aДК+1,"РУБ"); else СумРуб_=0; fi;
     if not Сум_=0:
        LstКлюч[1]=ПризнДоговор_;
        LstСум[1]=Сум_;
        LstСумРуб[1]=СумРуб_;
     fi;
  fi; --if spДок:
  --
  nn=LengthOfArray(Раб.Договор.LstКлюч);
  if isAlt:
     if nn=0:
        nn=-1;
       else
        for n=1..nn do
         if spДок:
            LstТекст[n]=DateToString(lstДатРег[n])+"  "+LstТекст[n]+" №"+lstНомДок[n]+" от "+DateToString(lstДатДок[n])+">> "+Format("%.2N",LstСум[n])+" "+Вал_;
           else
            LstТекст[n]=Format("%.2N",LstСум[n])+" "+Вал_;
         fi;
        od;
        nn=Alternate(altЗагл,Раб.Договор.LstТекст,-1,SearchInArray(Раб.Договор.LstКлюч,altЗнач),12);
     fi;
  fi;
 Finally
  exclЗачетАв=False;
  exclСписанАв=False;
  exclОплКарт="";
  exclОплДок=nil;
  skipИмяПолеКарт=False;
 end;
 ^nn;
end;

Func ОКДП_Гр_Verify(varОКДП:S; Value: String; ver:i): logical;
var Rec: Record;
var Гр,ОКДП,flГр:S;
 flГр=if(ver=273,"ГР273","ГР");
 if not Value="":
    ОКДП=GetVariableS(varОКДП);
    Value=RepStr("0",Max(0,3-Length(Value)))+Value;
    Гр="";
    if not ОКДП="":
       Rec=ОКДП_В_Запись(ОКДП,"");
       if not Rec=nil:
          Гр=GetCardFieldS("РПО_ОКДП",Rec,flГр);
       fi;
    fi;
    if not Value="000" or (Value="000" and not (ОКДП="" or ОКДП="0000000")):
       if ОКДП_Гр_В_Запись(Value,if(Гр="","","CODE='"+Гр+"'"),ver)=nil:
          Message("Номеклатурная группа '"+value+if(Гр="","' не найдена","' не соотвествует коду ОКДП "+ОКДП+" ("+Гр+")"));
          ^False;
       fi;
    fi;
 fi;
 Return True;
end;

Proc ОКДП_Гр_Exit(varОКДП_Гр:S);
var ОКДП_Гр:S;
 ОКДП_Гр=GetVariableS(varОКДП_Гр);
 if not ОКДП_Гр="" and Length(ОКДП_Гр)<3:
    ОКДП_Гр=RepStr("0",3-Length(ОКДП_Гр))+ОКДП_Гр;
    PutVariableS(varОКДП_Гр,ОКДП_Гр);
 fi;
end;

Func ОКДП_Гр_Lookup(varОКДП_Гр:S; varОКДП:S; ver:i):Record;
var ОКДП_Гр,ОКДП,tmp,voc:S;
var rec: Record;
 voc=if(ver=273,"'ОКДП_ГР273'","'ОКДП_ГР'");
 ОКДП_Гр=GetVariableS(varОКДП_Гр);
 if not varОКДП="": ОКДП=GetVariableS(varОКДП); fi;
 tmp="";
 if ОКДП="":
    if ОКДП_Гр="": Rec=nil; else Rec=ОКДП_Гр_В_Запись(ОКДП_Гр,"",ver); fi;
   else
    rec=ОКДП_В_Запись(ОКДП,"");
    if not rec=nil: 
       tmp=GetCardFieldS("РПО_ОКДП",rec,if(ver=273,"Гр273","Гр"));
       if tmp="": tmp="000"; fi;
    fi;
    Rec=nil;
 fi;
 if tmp="":
    if Rec=nil:
       rec=Раб.Поиск.ВыборИзКартотеки("Выбор группы номенклатуры...","РПО_БЮДЖ_КЛАСС","CODE|TXT","Код|Наименование","Name_Voc="+voc);
      else
       rec=OpenCardFile("РПО_БЮДЖ_КЛАСС","Name_Voc="+voc,Rec);
    fi;
   else
    rec=OpenCardFile("РПО_БЮДЖ_КЛАСС","Name_Voc="+voc+" and CODE='"+tmp+"'");
 fi;
 if not rec=nil:
    ОКДП_Гр=GetCardFieldS("РПО_БЮДЖ_КЛАСС",Rec,"CODE");
    PutVariableS(varОКДП_Гр,ОКДП_Гр);
    ^Rec;
 fi;
 ^nil;
end;

Func ОКДП_Verify(varОКДП_Гр:S; Value: String; ver:i): logical;
var ОКДП_Гр,flГр,tmp:S;
var Rec: Record;
 flГр=if(ver=273,"ГР273","ГР");
 ОКДП_Гр=GetVariableS(varОКДП_Гр);
 if not Value="" and not ((ОКДП_Гр="000" or ОКДП_Гр="") and Value="0000000"):
    rec=ОКДП_В_Запись(Value,if(ОКДП_Гр="000":flГр+"=''"|ОКДП_Гр="":""|true:flГр+"='"+ОКДП_Гр+"'"));
    if rec=nil:
       Message("Код '"+value+"' не найден в классификаторе ОКДП"+if(ОКДП_Гр="",""," (номенклатурная группа "+ОКДП_Гр+")"));
       ^False;
      else
       tmp=ВзятьЗначОКДП(value,flГр);
       if not tmp=ОКДП_Гр:
          PutVariableS(varОКДП_Гр,tmp);
       fi;
    fi;
 fi;
 Return True;
end;

Func ОКДП_Lookup(varОКДП_Гр:S; varОКДП:S; varfОКДП:S; ver:i): Record;
var ОКДП_Гр,ОКДП,tmp,flГр:S;
var fОКДП:I;
var Rec: Record;
 flГр=if(ver=273,"ГР273","ГР");
 fОКДП=GetVariableI(varfОКДП);
 if fОКДП=0: 
    fОКДП=ЗагрузСправ("РПО_ОКДП",PlanVar("Std_Rpo")+"\DBF\РПО_ОКДП",ieCRD,"Общероссийский классификатор видов экономической деятельности, продукции и услуг (ОКДП)"+Chr(13)+"Внимание! Процес загрузки займет значительное время");
 fi;
 if fОКДП=1:
    if not varОКДП_Гр="": ОКДП_Гр=GetVariableS(varОКДП_Гр); fi;
    ОКДП=GetVariableS(varОКДП);
    tmp=if(ОКДП_Гр="000":flГр+"=''"|ОКДП_Гр="":""|true:flГр+"='"+ОКДП_Гр+"'");
    if ОКДП="": rec=nil; else rec=ОКДП_В_Запись(ОКДП,tmp); fi;
    if Rec=nil:
       rec=Раб.Поиск.ВыборИзКартотеки("Выбор ОКДП","РПО_ОКДП","КОД|НАИМ","Код|Наименование",tmp);
      else
       rec=OpenCardFile("РПО_ОКДП",tmp,rec);
    fi;
    if not rec=nil:
       ОКДП=GetCardFieldS("РПО_ОКДП",Rec,"Код");
       PutVariableS(varОКДП,ОКДП);
       if ОКДП_Гр="" and not varОКДП_Гр="":
          ОКДП_Гр=GetCardFieldS("РПО_ОКДП",Rec,flГр);
          if ОКДП_Гр="": ОКДП_Гр="000"; fi;
          PutVariableS(varОКДП_Гр,ОКДП_Гр);
       fi;
       PutVariableI(varfОКДП,fОКДП);
       ^Rec;
    fi;
 fi;
 Return nil;
end;

Func ОКПД_Verify(Value:S; aФильтр:S): logical;
var Rec: Record;
 if not Value="" and not Value="00.00.00.000":
    rec=ОКПД_В_Запись(Value,aФильтр);
    if rec=nil:
       Message("Код '"+value+"' не найден в классификаторе ОКПД",mtError);
       ^False;
    fi;
 fi;
 Return True;
end;

Func ОКПД_Lookup(varОКПД:S; varfОКПД:S; aФильтр:S): Record;
var ОКПД:S;
var fОКПД:I;
var Rec: Record;
 fОКПД=GetVariableI(varfОКПД);
 if fОКПД=0:
    fОКПД=ЗагрузСправ("РПО_ОКПД",PlanVar("Std_Rpo")+"\DBF\РПО_ОКПД",ieCRD,"Загрузить Общероссийский классификатор продукции по видам экономической деятельности (ОКПД)"+Chr(13)+"Внимание! Процес загрузки может занять некоторое время");
 fi;
 if fОКПД=1:
    ОКПД=GetVariableS(varОКПД);
    if ОКПД="": rec=nil; else rec=ОКПД_В_Запись(ОКПД,aФильтр); fi;
    if Rec=nil:
       rec=Раб.Поиск.ВыборИзКартотеки("Выбор ОКПД","РПО_ОКПД","КОД|НАИМ","Код|Наименование",aФильтр);
      else
       rec=OpenCardFile("РПО_ОКПД",aФильтр,rec);
    fi;
    if not rec=nil:
       ОКПД=GetCardFieldS("РПО_ОКПД",Rec,"Код");
       PutVariableS(varОКПД,ОКПД);
       PutVariableI(varfОКПД,fОКПД);
       ^Rec;
    fi;
 fi;
 Return nil;
end;


Func ПризнОбнов(recПризнак:Record; recДок:Record; refДок:S; valСправ:S; valПризнак:S; valКмнт:S; valКлюч:S; valДата:D; aRefresh:L):Record;
var OWA,n:I;
var Признак_,err:S;
 err="";
 if recДок=nil or refДок="" or valСправ="" or valПризнак="": ^nil; fi;
 recПризнак=IntegerToRecord(Abs(RecordToInteger(recПризнак)));
 OWA=OpenWorkArea(crdДоговор_Признак,"","UKey="+RecordToString(recПризнак));
 try
  n=Records(OWA);
  if not n=0 then
     Признак_=GetFieldS(OWA,1,"Признак");
     if Признак_=valПризнак and GetFieldR(OWA,1,refДок)=recДок 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.КартПризнакИспользуется(crdДоговор_Признак,"Признак",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 recДок=GetFieldR(OWA,n,refДок): n=PutFieldR(OWA,n,refДок,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(crdДоговор_Признак,"","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 Договор_Копировать(Дог:record; Cmd1:S; Cmd2:S; Cmd3:S):Record; --
var OWAs,OWAt,n,nn,n1,w,ww,i:I;
var tmp,field,typ,val,err,cmd:S;
var Res:Record;
 Res=nil;
 err="";
 --Копировать договор
 OWAs=OpenWorkArea(crdДоговор,"","UKey="+RecordToString(Дог));
 try
  OWAt=OpenWorkArea(crdДоговор,"","1=0");
  Try
   Beginchanging(OWAt);
   Try
     n1=InsertRecord(OWAt);
     Res=GetRecordKey(OWAt,n1);
     CopyRecord(OWAs,OWAt,1,n1);
     for i=1..3 do
      cmd=if(i=1:cmd1|i=2:cmd2|i=3:cmd3|true:"");
      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;
     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;
 OWAs=OpenWorkArea(crdДоговор_КБК,"","Договор="+RecordToString(Дог));
 Try
  OWAt=OpenWorkArea(crdДоговор_КБК,"","1=0");
  Try
   Beginchanging(OWAt);
   Try
    nn=records(OWAs);
    for n=1..nn do
     n1=InsertRecord(OWAt);
     CopyRecord(OWAs,OWAt,n,n1);
     n1=PutFieldR(OWAt,n1,"Договор",Res);
    od;
    EndChanging(OWAt);
   Except
    CancelChanging(OWAt);
    Trace(ErrorMessage);
   End;
  Finally
   CloseWorkArea(OWAt);
  end;
 Finally
  CloseWorkArea(OWAs);
 end;
 --Копировать позиции, заменяя поле "Договор"
 OWAs=OpenWorkArea(crdДоговор_ТМЦ,"","Договор="+RecordToString(Дог));
 Try
  OWAt=OpenWorkArea(crdДоговор_ТМЦ,"","1=0");
  Try
   Beginchanging(OWAt);
   Try
    nn=records(OWAs);
    for n=1..nn do
     n1=InsertRecord(OWAt);
     CopyRecord(OWAs,OWAt,n,n1);
     n1=PutFieldR(OWAt,n1,"Договор",Res);
    od;
    EndChanging(OWAt);
   Except
    CancelChanging(OWAt);
    Trace(ErrorMessage);
   End;
  Finally
   CloseWorkArea(OWAt);
  end;
 Finally
  CloseWorkArea(OWAs);
 end;
 ^Res;
end;

func Изменение(Дог:Record):record;
var OWA:I;
var res:Record;
res=nil;
OWA=OpenWorkArea(crdДоговор,"","Договор_пре="+RecordToString(Дог));
try
  if Records(OWA)=1 then Res=GetrecordKey(OWA,1); fi;
finally
  CloseWorkArea(OWA);
end;
^Res;
end;

Func ДогНаДату(Дог:Record; aДата:Date):Record;
var Res:Record;
var ДатаПо,ДатаС:Date;
var Rec:Record;
  ДатаС=GetCardFieldD(crdДоговор,Дог,"ДатаРег");
  Rec=Дог;
  if ДатаС>aДата then
     --перебор назад

     while ДатаС>aДата and Rec<>nil do --запись проверяем на всякий случай
        Res=Rec;
        ДатаС=GetCardFieldD(crdДоговор,Rec,"ДатаРег");
        Rec=GetCardFieldR(crdДоговор,Rec,"ДОГОВОР_ПРЕ");
        if not RecordExists(crdДоговор,Rec) then Rec=nil; fi;
     od;
    -- if Rec<>nil then Res=Rec; fi;
    else
     --перебор вперед
     ДатаПо=ДатаС;
     Res=Rec;
     while ДатаПо<aДата and Rec<>nil do --запись проверяем на всякий случай
        Res=Rec;
        ДатаПо=GetCardFieldD(crdДоговор,Rec,"ДатаРег");
        Rec=Изменение(Rec);
     od;
  fi;
^Res;
end;

Func УстанCMF (Sender: S; aCrd:S; aRec: Record; Flag:L; fMsg:L):S;
var n,nn,z,i,ii,ErrCode:i;
var ErrMsg:S;
var Upd:L;
 ErrMsg="";
 ErrCode=0;
 ClearVariable(Раб.Договор.Buf);
 if aCrd="РПО_ДОГОВОР":
    nn=nn+1; Buf[nn]=crdДоговор;
    nn=nn+1; Buf[nn]=crdДоговор_КБК;
    nn=nn+1; Buf[nn]=crdДоговор_ТМЦ;
    nn=nn+1; Buf[nn]=crdБО;
    nn=nn+1; Buf[nn]="РПО_ГЭК";
    nn=nn+1; Buf[nn]="РПО_СПИСОК_ФАЙЛОВ";
    nn=nn+1; Buf[nn]="РПО_ДОГОВОР_ОТЧ_ИСПОЛ";
   |aCrd="РПО_ДО":
    nn=nn+1; Buf[nn]=crdДО;
    nn=nn+1; Buf[nn]=crdБО;
    nn=nn+1; Buf[nn]="РПО_ГЭК";
 fi;
 Раб.ИмяПолеКарт.Начать;
 Try
  for n=1..nn do
   if not Buf[n]=Sender:
      z=Раб.ИмяПолеКарт.ВзятьКартОбл(Buf[n]);
      if Buf[n]="РПО_ГЭК" or Buf[n]="РПО_СПИСОК_ФАЙЛОВ":
         SetFilter(z,"ДОК='"+aCrd+"' and ЗАПИСЬ="+Str(RecordToInteger(aRec)));
        else
         SetFilter(z,if(Buf[n]=aCrd,"UKey="+RecordToString(aRec),SubStr(aCrd,5,255)+"="+RecordToString(aRec)));
      fi;
      Upd=False;
      ii=Records(z);
      if not ii=0:
         BeginChanging(z,False);
         Try
          for i=1..ii do
           if not GetFieldL(z,i,"ClosedModFob")=Flag: i=PutFieldL(z,i,"ClosedModFob",Flag); Upd=True; fi;
          od;
          if Upd: EndChanging(z); else CancelChanging(z); fi;
         Except
          ErrCode=ErrorCode;
          ErrMsg=ErrorMessage;
          CancelChanging(z);
          if ErrMsg="": ErrMsg="Совсем внезапная ошибка (возможно запись уже изменяется)"; fi;
          Break;
         end;
      fi;
   fi;
  od;
 Finally
  Раб.ИмяПолеКарт.Закончить;
 end;
 if not ErrMsg="" and fMsg: Message(ErrMsg,mtError); fi;
 ^if(ErrMsg="" and ErrCode=0,"",Str(ErrCode)+"|"+ErrMsg);
end;

-- Функционал для работы с ОКСМ
--кэшированные данные
var ОКСМ_Имя[]:S;
var ОКСМ_ПолнИмя[]:S;
var ОКСМ_Код[]:S;
var ОКСМ_альфа2[]:S;
var ОКСМ_альфа3[]:S;

var fОКСМ:I = [0];

Func ОКСМ_Загружен:L;
 if Раб.Договор.fОКСМ = 0:
    --Загружаем без вопросов - функция должна вызываться прямо перед обращением к базе
    Раб.Договор.fОКСМ = ЗагрузСправ("РПО_ОКСМ",PlanVar("Std_Rpo")+"\DBF\РПО_ОКСМ",ieCRD,"");
 fi;
 Return (Раб.Договор.fОКСМ <> 0);
end;

Func ЗагрузитьОКСМПоФильтру(F:S):I;
  -- Загружает 1 страну на основе фильтра на таблицу
  -- Возвращает позицию в массиве кэшей
  -- Если стран больше 1 - возвращает указатель на последнюю
  var OWA, n, i:I;
  i = -1; --Будет возвращено при ошибке (в т.ч. при пустом фильтре)

  if not ОКСМ_Загружен:
    ^-1;
  fi;

  if РАБ.ДОГОВОР.ОКСМ_ПолнИмя[1] = '':
   --Пустое значение - значит массив обнулился при перезапуске, вычищаем
     ClearVariable(РАБ.ДОГОВОР.ОКСМ_Имя);
     ClearVariable(РАБ.ДОГОВОР.ОКСМ_ПолнИмя);
     ClearVariable(РАБ.ДОГОВОР.ОКСМ_Код);
     ClearVariable(РАБ.ДОГОВОР.ОКСМ_альфа2);
     ClearVariable(РАБ.ДОГОВОР.ОКСМ_альфа3);
  fi;
  OWA = OpenWorkArea("РПО_ОКСМ","",F);
  try
    for n = 1 .. Records(OWA) do --Не делаем оптимизаций, поскольку планируется минимум заходов
      i = LengthOfArray(РАБ.ДОГОВОР.ОКСМ_ПолнИмя);
      i = i + 1; --Добавляем после последнего
      РАБ.ДОГОВОР.ОКСМ_ПолнИмя[i] = GetFieldS(OWA, n, "ПОЛНИМЯ");
      РАБ.ДОГОВОР.ОКСМ_Имя[i] = GetFieldS(OWA, n, "КОРИМЯ");
      РАБ.ДОГОВОР.ОКСМ_Код[i] = GetFieldS(OWA, n, "КОД");
      РАБ.ДОГОВОР.ОКСМ_Альфа2[i] = GetFieldS(OWA, n, "Альфа2");
      РАБ.ДОГОВОР.ОКСМ_Альфа3[i] = GetFieldS(OWA, n, "Альфа3");
    od;
  finally
    CloseWorkArea(OWA);
  end;
  return i;
end;

Func ИмяСтраныПоАльфа2(Альфа2:S; ПолнИмя:L):S;
  var i:I;
  i = SearchInArray(ОКСМ_альфа2, Альфа2);
  if i = -1:
    i = ЗагрузитьОКСМПоФильтру("АЛЬФА2='"+Альфа2+"'");
  fi;
  if i = -1:
     --Так ничего и не нашли
    ^"";
  fi;
  if ПолнИмя:
     Return ОКСМ_ПолнИмя[i];
    else
     Return ОКСМ_Имя[i];
  fi;
end;

Func ИмяСтраныПоКоду(Код:S; ПолнИмя:L):S;
  var i:I;
  i = SearchInArray(ОКСМ_Код, Код);
  if i = -1:
    i = ЗагрузитьОКСМПоФильтру("Код='"+Код+"'");
  fi;
  if i = -1:
     --Так ничего и не нашли
     ^"";
  fi;
  if ПолнИмя:
     Return ОКСМ_ПолнИмя[i];
    else
     Return ОКСМ_Имя[i];
  fi;
end;

--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc AfterOpen(Destroy: Logical);
 if Run:
    sLS.Cell(1,2,CellReadOnly,ROLS);
    sLS.Cell(1,2,CellBgColor,if(ROLS,coTransparent,coAqua));
   else
    УпрLS=0;
 fi;
end;
--Обработчики событий шаблона -----
--

Конец
