-- Шаблон создан мастером бланков
-- 17.02.2007 13:19:07
--
БланкСШаблоном "Выгрузка бюджетных обязательствах в файл (формат TXB(N,C,S)140101)";

ТипДок:I;
hТипДок:I;

var Ver:S=if(ТипДок=0:"TXBN"|ТипДок=1:"TXBC"|ТипДок=2:"TXBS","")+"140101";
var Head:S="FK|"+ver+"|Турбо Бухгалтер 6.9 Бюджет-157н|"+SubStr(Str(Версия.Сборка0)+if(Версия.Сборка1<>0,"."+Str(Версия.Сборка1),"")+Версия.Сборка2,1,10)+"||";

Путь:String;
ПутьГЭК:String;
ПутьBN:String;
ПутьГЭКBN:String;
ПутьBC:String;
ПутьГЭКBC:String;
ПутьBS:String;
ПутьГЭКBS:String;

FlagВЛВС  :L;
var FlagВЛВС_:s=if(FlagВЛВС,"ДА","НЕТ");
FlagПравила:L=True;
XXXXX:S;
var ДатаРейс:D;
var DD:S=if(Day(ДатаРейс)<10, Str(Day(ДатаРейс)), Chr(65+Day(ДатаРейс)-10));
var M:S=if(Mon(ДатаРейс)<10,Str(Mon(ДатаРейс)),""+Chr(65+Mon(ДатаРейс)-10));
НомРейс_:I;
var НомРейс :S=if(FlagВЛВС, Раб.Бюджет2005.Format36(1007+НомРейс_), Раб.Бюджет2005.Format36(НомРейс_));
ИмяРейс_:S;
var ИмяРейс:S=if(FlagПравила,XXXXX+DD+НомРейс+if(ТипДок=0:".BN"|ТипДок=1:".BC"|True:".BS")+M,ИмяРейс_);
Секрет:I;
var ДН:D=[ToDay];
var ДК:D=[ToDay];
Рекв:Record;
Банк:Record;
FlagВБанк:L;
Отправ:S;
ОтправБанк:S;

var Head1:S=if(ТипДок=0:"Выгрузка сведений о принятых бюджетных обязательствах в файл"|ТипДок=1:"Выгрузка заявки на внесение изменений в бюджетное обязательство в файл"|ТипДок=2:"Выгрузка заявки на перегистрацию бюджетного обязательства в файл","");
var Head2:S="Версия формата: "+ver;
var Head3:S=if(ТипДок=0:"Список сведений о принятых бюджетных обязательствах"|ТипДок=1:"Список заявок на внесение изменений в бюджетное обязательство"|ТипДок=2:"Список заявок на перегистрацию бюджетного обязательства","");

var Загл8:S=if(ТипДок=0,"Сведения","Заявка");
var Загл8_2:S="Распечатать все";

var A:S="+";
var D:S="-";

var Упр:I;

var пп[]:i=$;
var Ном[]:S;
var Дат[]:D;
var Сум[]:N;
var ДокОсн[]:S;
var Контр[]:S;
var ГЭК_[]:S;
var Msg[]:S;
var Wrng[]:I;
var Err[]:I;
var WrngT[]:S;
var ErrT[]:S;
var UKey[]:Record;
var FNam[]:S;
var ГЭК[]:S;
var FTmpГЭК[]:S;
var FNameГЭК[]:S;
var Msg_:S="";
var Txt8_1[]:S=if(UKey[$]=nil,"","Открыть");
var Txt8_2[]:S=if(UKey[$]=nil,"","Печать");

var accept:String;

Folder:S;
FolderГЭК:S;

var SelfCrd:S="РПО_СВЕД_БО";
var SelfBro:S=if(ТипДок=1:"РПО_СВЕД_БО_ИЗМ","РПО_СВЕД_БО");
var SelfBln:S="ДОКУМЕНТЫ.ЛБО.СВЕД_БО_ВЫГРУЗКА_FK_TXBN140101";

var Buf[]:S;

var Run: Record;

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

var УпрНастр:L;
var НастрGUID:S;
var setДокОсн_CMF:L;
var setДокОсн_CMF_:S=if(setДокОсн_CMF,"Да","Нет");
var fГЭК:L;
var fПутьГЭК:L;
var fПапкаГЭК:L;
var ФорматГЭК:I;

var fДобГородВБанк:L;
var setВариантР5:I;
var fGUID_FK:L;
var setОкрПроцАв:S;

btnРейс     :Object;
btnСЭД      :Object;
btnОпись    :Object;
btnНастр    :Object;
bvlГЭК      :Object;
cbГЭК       :Object;
cbПутьГЭК   :Object;
cbПапкаГЭК  :Object;
lbФорматГЭК :Object;
cbxФорматГЭК:Object;

var Buf[]:S;
var BufФАИП_Наим1[]:S;
var BufФАИП_Наим2[]:S;
var BufФАИП_Наим3[]:S;
var BufФАИП_Наим4[]:S;
var BufФАИП_Код[]:S;
var BufИст[]:S;
var BufТипКБК[]:S;
var BufКБК[]:S;
var BufПредм1[]:S;
var BufПредм2[]:S;
var BufПредм3[]:S;
var BufПредм4[]:S;
var BufСумМ1[]:N;
var BufСумМ2[]:N;
var BufСумМ3[]:N;
var BufСумМ4[]:N;
var BufСумМ5[]:N;
var BufСумМ6[]:N;
var BufСумМ7[]:N;
var BufСумМ8[]:N;
var BufСумМ9[]:N;
var BufСумМ10[]:N;
var BufСумМ11[]:N;
var BufСумМ12[]:N;
var BufСум1[]:N;
var BufСум2[]:N;
var BufСум3[]:N;
var BufСум4[]:N;
var BufСум5[]:N;
var BufСум6[]:N;
var BufИзмМ1[]:N;
var BufИзмМ2[]:N;
var BufИзмМ3[]:N;
var BufИзмМ4[]:N;
var BufИзмМ5[]:N;
var BufИзмМ6[]:N;
var BufИзмМ7[]:N;
var BufИзмМ8[]:N;
var BufИзмМ9[]:N;
var BufИзмМ10[]:N;
var BufИзмМ11[]:N;
var BufИзмМ12[]:N;
var BufИзм1[]:N;
var BufИзм2[]:N;
var BufИзм3[]:N;
var BufИзм4[]:N;
var BufИзм5[]:N;
var BufИзм6[]:N;
var BufПримеч[]:S;
var BufДопКл[]:S;
var СумИ1;СумИ2;СумИ3;СумИ4;СумИ5;СумИ6;СумИМ1;СумИМ2;СумИМ3;СумИМ4;СумИМ5;СумИМ6;СумИМ7;СумИМ8;СумИМ9;СумИМ10;СумИМ11;СумИМ12:N;

var isФАИП:L;
--
--Процедуры и функции -------------
Proc Настр(aСохр:L);
var tmp:S;
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать(SelfBln,0,0,"",НастрGUID):
    Раб.Настр.Добавить("setДокОсн_CMF","L");
    Раб.Настр.Добавить("setBS_NOM_ZI","L");
    Раб.Настр.Добавить("fГЭК","L");
    Раб.Настр.Добавить("fПутьГЭК","L");
    Раб.Настр.Добавить("fПапкаГЭК","L");
    Раб.Настр.Добавить("ФорматГЭК","I");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
    fi;
 fi;
 fДобГородВБанк=False;
 setВариантР5=0;
 fGUID_FK=False;
 setОкрПроцАв="4";
 if Раб.Настр.Начать("ДОКУМЕНТЫ.ЛБО.СВЕД_БО",0,0,"",GetGUID):
    tmp=Раб.Настр.ВзятьЗначение("fДобГородВБанк");
    fДобГородВБанк=if(tmp="True":True|tmp="False":False|True:fДобГородВБанк);
    tmp=Раб.Настр.ВзятьЗначение("setВариантР5");
    setВариантР5=Int(tmp);
    tmp=Раб.Настр.ВзятьЗначение("setОкрПроцАв");
    setОкрПроцАв=if(tmp="","4",tmp);
    tmp=Раб.Настр.ВзятьЗначение("fGUID_FK");
    fGUID_FK=if(tmp="True":True|tmp="False":False|True:fGUID_FK);
 fi;
end;

Proc ОткрНастр (Flag:L);
 btnРейс.Visible=not Flag;
 btnСЭД.Visible=not Flag;
 btnОпись.Visible=not Flag;
 btnНастр.Visible=not Flag;
 bvlГЭК.Visible=not Flag;
 cbГЭК.Visible=not Flag;
 cbПутьГЭК.Visible=not Flag;
 cbПапкаГЭК.Visible=not Flag;
 lbФорматГЭК.Visible=not Flag;
 cbxФорматГЭК.Visible=not Flag;
 УпрНастр=Flag;
 if Flag=True: Template.Field="НастрЗакр"; Template.Frame=1; fi;
end;

Proc РасчетГЭК(OWA:i; n:i; iter:i);
var Rec: Record;
var Crd:S;
var z,i:i;
var Вид_:S;
 ГЭК_[Iter]="";
 ГЭК[Iter]="";
 if not fГЭК: Exit; fi;
 Crd="РПО_ДОГОВОР";
 Rec=GetFieldR(OWA,n,"ДОГОВОР");
 if not Rec=nil:
    z=Max(Раб.Вспом.Сканер.ЧитатьГЭК(Crd,RecordToInteger(Rec),"jpg",True),0);
    if not z=0:
       Вид_=GetFieldS(OWA,n,"Договор.НаимДок.НаимК");
       if Вид_="": Вид_=GetFieldS(OWA,n,"Договор.НаимДок.Наим"); fi;
       ГЭК_[Iter]=Вид_+" №"+GetFieldS(OWA,n,"Договор.НомерДок")+" : "+Str(z);
       ГЭК[Iter]=Crd+":"+Str(RecordToInteger(Rec));
    fi;
   else
    Crd="РПО_ДО";
    Rec=GetFieldR(OWA,n,"ДО");
    if not Rec=nil:
       z=Max(Раб.Вспом.Сканер.ЧитатьГЭК(Crd,RecordToInteger(Rec),"jpg",True),0);
       if not z=0:
          Вид_=GetFieldS(OWA,n,"ДО.НаимДок.НаимК");
          if Вид_="": Вид_=GetFieldS(OWA,n,"ДО.НаимДок.Наим"); fi;
          ГЭК_[Iter]=Вид_+" №"+GetFieldS(OWA,n,"ДО.НомерДок")+" : "+Str(z);
          ГЭК[Iter]=Crd+":"+Str(RecordToInteger(Rec));
       fi;
    fi;
 fi;
 --
 Crd=SelfCrd;
 Rec=GetRecordKey(OWA,n);
 i=Max(Раб.Вспом.Сканер.ЧитатьГЭК(Crd,RecordToInteger(Rec),"jpg",True),0);
 if not i=0:
    ГЭК_[Iter]=Раб.Бюджет2005.Объединить(ГЭК_[Iter],"БО"+": "+Str(i),Chr(13));
    ГЭК[Iter]=Раб.Бюджет2005.Объединить(ГЭК[Iter],Crd+":"+Str(RecordToInteger(Rec)),",");
 fi;
end;

Proc Инициализация;
var i:i;
 accept='';
 for i=32..123 do
  accept=accept+chr(i);
 od;
 accept=accept+chr(125);
 accept=accept+chr(126);
 for i=192..255 do
  accept=accept+chr(i); 
 od;
 accept=accept+chr(185);
 accept=accept+chr(184);
 accept=accept+chr(168);
end;

Proc AddMsg(warn:string;Iter:I;Crit:L);
 if Err[Iter]=0 then ErrT[Iter]=''; else if crit: ErrT[Iter]=ErrT[Iter]+Chr(13); fi; fi;
 if Wrng[Iter]=0 then WrngT[Iter]=''; else if not crit: WrngT[Iter]=WrngT[Iter]+Chr(13); fi; fi;
 if Crit :
    ErrT[Iter]=ErrT[Iter]+warn;
    Err[Iter]=Err[Iter]+1;
   else
    WrngT[Iter]=WrngT[Iter]+warn;
    Wrng[Iter]=Wrng[Iter]+1;
 fi;
 Msg[Iter]=if(Err[Iter]>0,"Ошибка! "+ErrT[Iter]+chr(13),'')+if(Wrng[Iter]>0,"Предупреждение! "+WrngT[Iter],'');
end;

func fixN(Mystring:S):string;
 ^Trim(Mystring);
end;

proc НаОшибку;
var i:I;
 for  i= 1 to Упр do
   if Err[i]>0: Template.Field='Msg'; Template.Frame=i; Exit; fi;
 od;
end;

proc НаПредупр;
var i:I;
 for  i= 1 to Упр do
   if Wrng[i]>0: Template.Field='Msg'; Template.Frame=i; Exit; fi;
 od;
end;

func ПроверкаНаСтандарт (Must:I; Len:I; MyField:String;FieldName: String; Iter:I):S;
var Res:S;
var i:integer;
--Must -1 - не важно
--      0 - предупреждать
--      1 - ошибка
Res='';
if MyField="" then
   if Must=0: AddMsg('Поле "'+FieldName+'" не заполнено.',Iter,False); ^'';
     |Must=1: AddMsg('Обязательное поле "'+FieldName+'" не заполнено.',Iter,True); ^'';
   fi;
fi;
for i= 1..Length(MyField) do
  if not(Pos(SubStr(MyField,i,1),accept)>0):
    if res='':Res='Поле "'+FieldName;
      else res=res+';';
    fi;
  res=res+'" содержит недопустимый символ('+SubStr(MyField,i,1)+') на позиции ' +Str(i);
  fi;
end;
if Length(MyField)>Abs(Len) then AddMsg('Поле "'+FieldName+'" превышает максимальную длину(' + Str(Abs(Len))+')',Iter,True);
  |Len>0 and Length(MyField)<Len and Length(MyField)>0 then AddMsg('Поле "'+FieldName+'" меньше обязательной длины(' + Str(Len)+')',Iter,True);
fi;
if res<>'' then res=res+'.'; fi;
^Res;
end;

Func RoundПроцАв(Val:N):N;
var Pr:I;
 if setОкрПроцАв="": setОкрПроцАв="4"; fi;
 Pr=Abs(Int(setОкрПроцАв));
 if Pos("-",setОкрПроцАв)=0:
    ^Round(Val,Pr);
   else
    ^Trunc(Val,Abs(Pr));
 fi;
end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(Ном);
 ClearVariable(Дат);
 ClearVariable(Сум);
 ClearVariable(ДокОсн);
 ClearVariable(Контр);
 ClearVariable(ГЭК_);
 ClearVariable(Msg);
 ClearVariable(Wrng);
 ClearVariable(Err);
 ClearVariable(UKey);
 ClearVariable(FNam);
 ClearVariable(ГЭК);
 ClearVariable(FTmpГЭК);
 ClearVariable(FNameГЭК);
end;

Proc УдалитьПустыеСтроки;
var Iter:i;
 Iter=1;
 While Iter<=Упр do
  if UKey[Iter]=nil:
     DeleteFrame(Упр,Iter);
   else 
    Iter=Iter+1;
  fi; 
 od;
end;

Func РасчетРаздела (OWA:I; x:i):I;
var n,nn,z,OA,i,ii:I;
var Key,Ист,ТипКБК,КБК,Предм1,Предм2,Предм3,Предм4,Примеч,ДопКл,Доп_Статус_:S;
var ФАИП_Код,ФАИП_Наим1,ФАИП_Наим2,ФАИП_Наим3,ФАИП_Наим4:S;
var Сум1,Сум2,Сум3,Сум4,Сум5,Сум6,СумМ1,СумМ2,СумМ3,СумМ4,СумМ5,СумМ6,СумМ7,СумМ8,СумМ9,СумМ10,СумМ11,СумМ12:N;
var Изм1,Изм2,Изм3,Изм4,Изм5,Изм6,ИзмМ1,ИзмМ2,ИзмМ3,ИзмМ4,ИзмМ5,ИзмМ6,ИзмМ7,ИзмМ8,ИзмМ9,ИзмМ10,ИзмМ11,ИзмМ12:N;
var Осн_ДокСум_:N;
var crcПредм,crcПримеч:I;
var nul:L;
 ClearVariable(Buf);
 ClearVariable(BufФАИП_Наим1);
 ClearVariable(BufФАИП_Наим2);
 ClearVariable(BufФАИП_Наим3);
 ClearVariable(BufФАИП_Наим4);
 ClearVariable(BufФАИП_Код);
 ClearVariable(BufИст);
 ClearVariable(BufКБК);
 ClearVariable(BufТипКБК);
 ClearVariable(BufСум1);
 ClearVariable(BufСум2);
 ClearVariable(BufСум3);
 ClearVariable(BufСум4);
 ClearVariable(BufСум5);
 ClearVariable(BufСум6);
 ClearVariable(BufСумМ1);
 ClearVariable(BufСумМ2);
 ClearVariable(BufСумМ3);
 ClearVariable(BufСумМ4);
 ClearVariable(BufСумМ5);
 ClearVariable(BufСумМ6);
 ClearVariable(BufСумМ7);
 ClearVariable(BufСумМ8);
 ClearVariable(BufСумМ9);
 ClearVariable(BufСумМ10);
 ClearVariable(BufСумМ11);
 ClearVariable(BufСумМ12);
 ClearVariable(BufИзм1);
 ClearVariable(BufИзм2);
 ClearVariable(BufИзм3);
 ClearVariable(BufИзм4);
 ClearVariable(BufИзм5);
 ClearVariable(BufИзм6);
 ClearVariable(BufИзмМ1);
 ClearVariable(BufИзмМ2);
 ClearVariable(BufИзмМ3);
 ClearVariable(BufИзмМ4);
 ClearVariable(BufИзмМ5);
 ClearVariable(BufИзмМ6);
 ClearVariable(BufИзмМ7);
 ClearVariable(BufИзмМ8);
 ClearVariable(BufИзмМ9);
 ClearVariable(BufИзмМ10);
 ClearVariable(BufИзмМ11);
 ClearVariable(BufИзмМ12);
 ClearVariable(BufПримеч);
 ClearVariable(BufДопКл);
 Осн_ДокСум_=GetFieldN(OWA,x,"Осн_ДокСум");
 Доп_Статус_=GetFieldS(OWA,x,"Доп_Статус");
 СумИ1=0;
 СумИ2=0;
 СумИ3=0;
 СумИ4=0;
 СумИ5=0;
 СумИ6=0;
 СумИМ1=0;
 СумИМ2=0;
 СумИМ3=0;
 СумИМ4=0;
 СумИМ5=0;
 СумИМ6=0;
 СумИМ7=0;
 СумИМ8=0;
 СумИМ9=0;
 СумИМ10=0;
 СумИМ11=0;
 СумИМ12=0;
 isФАИП=False;
 OA=OpenArray(OWA,x,"Расшифр","","СУМ1_1<>0 or СУМ1_2<>0 or СУМ1_3<>0 or СУМ1_4<>0 or СУМ1_5<>0 or СУМ1_6<>0 or СУМ1_7<>0 or СУМ1_8<>0 or СУМ1_9<>0 or СУМ1_10<>0 or СУМ1_11<>0 or СУМ1_12<>0 or СУМ2<>0 or СУМ3<>0 or СУМ4<>0 or СУМ5<>0 or СУМ6<>0");
 try
  nn=Records(OA);
  nul=(nn=0);
  SetFilter(OA,"");
  nn=Records(OA);
  for n=1..nn do
   if GetFieldR(OA,n,"ФАИП")=nil:
      ФАИП_Наим1="";
      ФАИП_Наим2="";
      ФАИП_Наим3="";
      ФАИП_Наим4="";
      ФАИП_Код="";
     else
      ФАИП_Наим1=GetFieldS(OA,n,"ФАИП.Наим1");
      ФАИП_Наим2=GetFieldS(OA,n,"ФАИП.Наим2");
      ФАИП_Наим3=GetFieldS(OA,n,"ФАИП.Наим3");
      ФАИП_Наим4=GetFieldS(OA,n,"ФАИП.Наим4");
      ФАИП_Код=GetFieldS(OA,n,"ФАИП.Код");
   fi;
   Ист=GetFieldS(OA,n,"Ист");
   ТипКБК=GetFieldS(OA,n,"ТипКБК");
   КБК=GetFieldS(OA,n,"КБК");
   Предм1=GetFieldS(OA,n,"Предм1");
   Предм2=GetFieldS(OA,n,"Предм2");
   Предм3=GetFieldS(OA,n,"Предм3");
   Предм4=GetFieldS(OA,n,"Предм4");
   СумМ1=GetFieldN(OA,n,"СУМ1_1");
   СумМ2=GetFieldN(OA,n,"СУМ1_2");
   СумМ3=GetFieldN(OA,n,"СУМ1_3");
   СумМ4=GetFieldN(OA,n,"СУМ1_4");
   СумМ5=GetFieldN(OA,n,"СУМ1_5");
   СумМ6=GetFieldN(OA,n,"СУМ1_6");
   СумМ7=GetFieldN(OA,n,"СУМ1_7");
   СумМ8=GetFieldN(OA,n,"СУМ1_8");
   СумМ9=GetFieldN(OA,n,"СУМ1_9");
   СумМ10=GetFieldN(OA,n,"СУМ1_10");
   СумМ11=GetFieldN(OA,n,"СУМ1_11");
   СумМ12=GetFieldN(OA,n,"СУМ1_12");
   Сум2=GetFieldN(OA,n,"СУМ2");
   Сум3=GetFieldN(OA,n,"СУМ3");
   Сум4=GetFieldN(OA,n,"СУМ4");
   Сум5=GetFieldN(OA,n,"СУМ5");
   Сум6=GetFieldN(OA,n,"СУМ6");
   ИзмМ1=СумМ1-GetFieldN(OA,n,"СУМ_ПРЕ1_1");
   ИзмМ2=СумМ2-GetFieldN(OA,n,"СУМ_ПРЕ1_2");
   ИзмМ3=СумМ3-GetFieldN(OA,n,"СУМ_ПРЕ1_3");
   ИзмМ4=СумМ4-GetFieldN(OA,n,"СУМ_ПРЕ1_4");
   ИзмМ5=СумМ5-GetFieldN(OA,n,"СУМ_ПРЕ1_5");
   ИзмМ6=СумМ6-GetFieldN(OA,n,"СУМ_ПРЕ1_6");
   ИзмМ7=СумМ7-GetFieldN(OA,n,"СУМ_ПРЕ1_7");
   ИзмМ8=СумМ8-GetFieldN(OA,n,"СУМ_ПРЕ1_8");
   ИзмМ9=СумМ9-GetFieldN(OA,n,"СУМ_ПРЕ1_9");
   ИзмМ10=СумМ10-GetFieldN(OA,n,"СУМ_ПРЕ1_10");
   ИзмМ11=СумМ11-GetFieldN(OA,n,"СУМ_ПРЕ1_11");
   ИзмМ12=СумМ12-GetFieldN(OA,n,"СУМ_ПРЕ1_12");
   Изм2=Сум2-GetFieldN(OA,n,"СУМ_ПРЕ2");
   Изм3=Сум3-GetFieldN(OA,n,"СУМ_ПРЕ3");
   Изм4=Сум4-GetFieldN(OA,n,"СУМ_ПРЕ4");
   Изм5=Сум5-GetFieldN(OA,n,"СУМ_ПРЕ5");
   Изм6=Сум6-GetFieldN(OA,n,"СУМ_ПРЕ6");
   ДопКл=GetFieldS(OA,n,"ДопКл");
   Примеч=GetFieldS(OA,n,"Примеч");
   if (not Round(СумМ1,2)=0 or not Round(СумМ2,2)=0 or not Round(СумМ3,2)=0 or not Round(СумМ4,2)=0 or not Round(СумМ5,2)=0 or not Round(СумМ6,2)=0 or not Round(СумМ7,2)=0 or not Round(СумМ8,2)=0 or not Round(СумМ9,2)=0 or not Round(СумМ10,2)=0 or not Round(СумМ11,2)=0 or not Round(СумМ12,2)=0 or not Round(Сум2,2)=0 or not Round(Сум3,2)=0 or not Round(Сум4,2)=0 or not Round(Сум5,2)=0 or not Round(Сум6,2)=0) or
      ((not Round(ИзмМ1,2)=0 or not Round(ИзмМ2,2)=0 or not Round(ИзмМ3,2)=0 or not Round(ИзмМ4,2)=0 or not Round(ИзмМ5,2)=0 or not Round(ИзмМ6,2)=0 or not Round(ИзмМ7,2)=0 or not Round(ИзмМ8,2)=0 or not Round(ИзмМ9,2)=0 or not Round(ИзмМ10,2)=0 or not Round(ИзмМ11,2)=0 or not Round(ИзмМ12,2)=0 or not Round(Изм2,2)=0 or not Round(Изм3,2)=0 or not Round(Изм4,2)=0 or not Round(Изм5,2)=0 or not Round(Изм6,2)=0) and ТипДок=1 and setВариантР5=0) or
      (ТипДок=1 and (nul or Доп_Статус_="2")):
      Сум1=СумМ1+СумМ2+СумМ3+СумМ4+СумМ5+СумМ6+СумМ7+СумМ8+СумМ9+СумМ10+СумМ11+СумМ12;
      СумИ1=СумИ1+Сум1;
      СумИ2=СумИ2+Сум2;
      СумИ3=СумИ3+Сум3;
      СумИ4=СумИ4+Сум4;
      СумИ5=СумИ5+Сум5;
      СумИ6=СумИ6+Сум6;
      СумИМ1=СумИМ1+СумМ1;
      СумИМ2=СумИМ2+СумМ2;
      СумИМ3=СумИМ3+СумМ3;
      СумИМ4=СумИМ4+СумМ4;
      СумИМ5=СумИМ5+СумМ5;
      СумИМ6=СумИМ6+СумМ6;
      СумИМ7=СумИМ7+СумМ7;
      СумИМ8=СумИМ8+СумМ8;
      СумИМ9=СумИМ9+СумМ9;
      СумИМ10=СумИМ10+СумМ10;
      СумИМ11=СумИМ11+СумМ11;
      СумИМ12=СумИМ12+СумМ12;
      crcПредм=Раб.CRC16.CRC16_(0,Предм1);
      crcПредм=Раб.CRC16.CRC16_(crcПредм,Предм2);
      crcПредм=Раб.CRC16.CRC16_(crcПредм,Предм3);
      crcПредм=Раб.CRC16.CRC16_(crcПредм,Предм4);
      crcПримеч=Раб.CRC16.CRC16_(0,Примеч);
      ii=if(ФАИП_Код="",1,2);
      for i=1..ii do
       if i=1:
          Key=ФАИП_Код+Ист+ТипКБК+КБК+Str16(crcПредм,4)+Str16(crcПримеч,4);
         else
          Key=ФАИП_Код; --идет первым по сортировке
          isФАИП=True;
       fi;
       z=SearchInArray(Buf,Key,True);
       if z=-1:
          z=InsertInArraySort(Buf,Key);
          InsertInArray(BufФАИП_Наим1,z,ФАИП_Наим1);
          InsertInArray(BufФАИП_Наим2,z,ФАИП_Наим2);
          InsertInArray(BufФАИП_Наим3,z,ФАИП_Наим3);
          InsertInArray(BufФАИП_Наим4,z,ФАИП_Наим4);
          InsertInArray(BufФАИП_Код,z,ФАИП_Код);
          InsertInArray(BufИст,z,if(i=1,Ист,"x"));
          InsertInArray(BufКБК,z,if(i=1,КБК,"x"));
          InsertInArray(BufТипКБК,z,if(i=1,ТипКБК,"x"));
          InsertInArray(BufПредм1,z,if(i=1,Предм1,"x"));
          InsertInArray(BufПредм2,z,if(i=1,Предм2,""));
          InsertInArray(BufПредм3,z,if(i=1,Предм3,""));
          InsertInArray(BufПредм4,z,if(i=1,Предм4,""));
          InsertInArray(BufСумМ1,z,СумМ1);
          InsertInArray(BufСумМ2,z,СумМ2);
          InsertInArray(BufСумМ3,z,СумМ3);
          InsertInArray(BufСумМ4,z,СумМ4);
          InsertInArray(BufСумМ5,z,СумМ5);
          InsertInArray(BufСумМ6,z,СумМ6);
          InsertInArray(BufСумМ7,z,СумМ7);
          InsertInArray(BufСумМ8,z,СумМ8);
          InsertInArray(BufСумМ9,z,СумМ9);
          InsertInArray(BufСумМ10,z,СумМ10);
          InsertInArray(BufСумМ11,z,СумМ11);
          InsertInArray(BufСумМ12,z,СумМ12);
          InsertInArray(BufСум1,z,Сум1);
          InsertInArray(BufСум2,z,Сум2);
          InsertInArray(BufСум3,z,Сум3);
          InsertInArray(BufСум4,z,Сум4);
          InsertInArray(BufСум5,z,Сум5);
          InsertInArray(BufСум6,z,Сум6);
          InsertInArray(BufИзмМ1,z,ИзмМ1);
          InsertInArray(BufИзмМ2,z,ИзмМ2);
          InsertInArray(BufИзмМ3,z,ИзмМ3);
          InsertInArray(BufИзмМ4,z,ИзмМ4);
          InsertInArray(BufИзмМ5,z,ИзмМ5);
          InsertInArray(BufИзмМ6,z,ИзмМ6);
          InsertInArray(BufИзмМ7,z,ИзмМ7);
          InsertInArray(BufИзмМ8,z,ИзмМ8);
          InsertInArray(BufИзмМ9,z,ИзмМ9);
          InsertInArray(BufИзмМ10,z,ИзмМ10);
          InsertInArray(BufИзмМ11,z,ИзмМ11);
          InsertInArray(BufИзмМ12,z,ИзмМ12);
          InsertInArray(BufИзм1,z,Изм1);
          InsertInArray(BufИзм2,z,Изм2);
          InsertInArray(BufИзм3,z,Изм3);
          InsertInArray(BufИзм4,z,Изм4);
          InsertInArray(BufИзм5,z,Изм5);
          InsertInArray(BufИзм6,z,Изм6);
          InsertInArray(BufПримеч,z,if(i=1,Примеч,"x"));
          InsertInArray(BufДопКл,z,if(i=1,ДопКл,"x"));
         else
          BufСумМ1 [z]=BufСумМ1 [z]+СумМ1;
          BufСумМ2 [z]=BufСумМ2 [z]+СумМ2;
          BufСумМ3 [z]=BufСумМ3 [z]+СумМ3;
          BufСумМ4 [z]=BufСумМ4 [z]+СумМ4;
          BufСумМ5 [z]=BufСумМ5 [z]+СумМ5;
          BufСумМ6 [z]=BufСумМ6 [z]+СумМ6;
          BufСумМ7 [z]=BufСумМ7 [z]+СумМ7;
          BufСумМ8 [z]=BufСумМ8 [z]+СумМ8;
          BufСумМ9 [z]=BufСумМ9 [z]+СумМ9;
          BufСумМ10[z]=BufСумМ10[z]+СумМ10;
          BufСумМ11[z]=BufСумМ11[z]+СумМ11;
          BufСумМ12[z]=BufСумМ12[z]+СумМ12;
          BufСум1  [z]=BufСум1[z]+Сум1;
          BufСум2  [z]=BufСум2[z]+Сум2;
          BufСум3  [z]=BufСум3[z]+Сум3;
          BufСум4  [z]=BufСум4[z]+Сум4;
          BufСум5  [z]=BufСум5[z]+Сум5;
          BufСум6  [z]=BufСум6[z]+Сум6;
          BufИзмМ1 [z]=BufИзмМ1 [z]+ИзмМ1;
          BufИзмМ2 [z]=BufИзмМ2 [z]+ИзмМ2;
          BufИзмМ3 [z]=BufИзмМ3 [z]+ИзмМ3;
          BufИзмМ4 [z]=BufИзмМ4 [z]+ИзмМ4;
          BufИзмМ5 [z]=BufИзмМ5 [z]+ИзмМ5;
          BufИзмМ6 [z]=BufИзмМ6 [z]+ИзмМ6;
          BufИзмМ7 [z]=BufИзмМ7 [z]+ИзмМ7;
          BufИзмМ8 [z]=BufИзмМ8 [z]+ИзмМ8;
          BufИзмМ9 [z]=BufИзмМ9 [z]+ИзмМ9;
          BufИзмМ10[z]=BufИзмМ10[z]+ИзмМ10;
          BufИзмМ11[z]=BufИзмМ11[z]+ИзмМ11;
          BufИзмМ12[z]=BufИзмМ12[z]+ИзмМ12;
          BufИзм1  [z]=BufИзм1[z]+Изм1;
          BufИзм2  [z]=BufИзм2[z]+Изм2;
          BufИзм3  [z]=BufИзм3[z]+Изм3;
          BufИзм4  [z]=BufИзм4[z]+Изм4;
          BufИзм5  [z]=BufИзм5[z]+Изм5;
          BufИзм6  [z]=BufИзм6[z]+Изм6;
       fi;
      od;
   fi;
  od;
  finally
   CloseWorkArea(OA);
  end;
 ^LengthOfArray(Buf);
end;

Func Проверить(Iter:I; Full:L):L;
var OWA,OA,n,n2,nr2,z1,z2,p,i:i;
var tmp,val:S;
var flagОсн,flagКонтр,flagИсп,flagДоп:L;
 Настр(False);
 if Iter=0: 
    УдалитьПустыеСтроки; 
    if Ukey[1]=nil: Message("Заполните список выгружаемых сведений (заявок)",mtError);
    if Упр<1: InsertFrame(Упр,1); fi;
    ^False; fi;
 fi;
 if Full:
    if ДатаРейс=1.1.100: Message("Введите дату формирования документов (рейса)",mtError); Template.Field="ДатаРейс"; ^False; fi;
    if НомРейс_=0: Message("Введите порядковый номер рейса",mtError);  Template.Field="НомРейс_"; ^False; fi;
    if FlagВЛВС:
       if НомРейс_<1 or НомРейс_>288: Message("Выход за границы диапазона номеров 1..288 для выделенной ЛВС",mtError); Template.Field="НомРейс_"; ^False; fi;
      else
       if НомРейс_<1 or НомРейс_>1007: Message("Выход за границы диапазона номеров 1..1007",mtError); Template.Field="НомРейс_"; ^False; fi;
    fi;
    if FlagПравила:
       if XXXXX="": Message("Введите код организации",mtError); Template.Field="XXXXX"; ^False; fi;
       if not Length(XXXXX)=5: Message("Длина кода организации должна быть 5 символов",mtError); Template.Field="XXXXX"; ^False; fi;
      else
       if ИмяРейс="": Message("Введите имя рейса",mtError); Template.Field="ИмяРейс"; ^False; fi;
    fi;
 fi;
 if Iter>0: z1=Iter; z2=Iter; Msg[Iter]=""; Wrng[Iter]=0; Err[Iter]=0;
   |True: z1=1; z2=Упр;  ClearVariable(Msg); ClearVariable(Wrng); ClearVariable(Err);
 fi;
 OWA=OpenWorkArea(SelfCrd,"");
 ShowProgress(z2-z1+1,"Проверка....");
 Try
  for n=z1..z2 do
   ProgressPos(n);
   i=GetRecordNumber(OWA,UKey[n]);
   if Records(OWA)>0:
      if SearchInArray(Ukey,Ukey[n],False,n+1)>0 then AddMsg("Строка дублирует строку№"+Str(SearchInArray(Ukey,Ukey[n],False,n+1)),n,True); fi;
      if GetFieldI(OWA,i,"ver")<11: AddMsg("Требуется версия документа >=11",n,True); fi;
      if GetFieldL(OWA,i,"Учитывать")=False: AddMsg("Флаг 'Учитывать' в сведении о бюджетном обязательстве не установлен",n,True);   fi;
      if GetFieldL(OWA,i,"УчетФК")=False: AddMsg("Флаг 'Подлежит учету в ФК' в сведении о бюджетном обязательстве не установлен",n,True);   fi;
      if GetFieldR(OWA,i,"Рекв")=nil: AddMsg("Не указан получатель бюджетных средств",n,True);  fi;
      if GetFieldR(OWA,i,"Банк")=nil: AddMsg("Не указано ОФК получателя бюджетных средств",n,True);  fi;
      flagОсн=(GetFieldS(OWA,i,"ОСН_ДОКНОМ")<>'' or GetFieldD(OWA,i,"ОСН_ДОКДАТ")<>1.1.100 or GetFieldN(OWA,i,"ОСН_ДОКСУМ")<>0 or not GetFieldS(OWA,i,"ОСН_ДОКОКВ")="" or GetFieldN(OWA,i,"ОСН_ДОКСУМРУБ")<>0 or GetFieldN(OWA,i,"ОСН_ДОКПРОЦАВ")<>0 or GetFieldN(OWA,i,"ОСН_ДОКСУМАВ")<>0);
      flagКонтр=GetFieldR(OWA,i,"РЕКВП")<>nil;
      flagИсп=(GetFieldS(OWA,i,"ИСП_ДОКНОМ")<>'' or GetFieldD(OWA,i,"ИСП_ДОКДАТ")<>1.1.100 or GetFieldS(OWA,i,"ИСП_ОРГАН")<>'' or GetFieldN(OWA,i,"ИСП_ДОКСУМ")<>0 or GetFieldS(OWA,i,"ИСП_УВЕДНОМ")<>'' or GetFieldD(OWA,i,"ИСП_УВЕДДАТ")<>1.1.100);
      flagДоп=not GetFieldS(OWA,i,"Доп_Ном_Реестр")="";
      tmp=ПроверкаНаСтандарт (1,1,GetFieldS(OWA,i,"БАНК.РПО_КОДБЮДЖ"),"Уровень бюджета",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      if Int(GetFieldS(OWA,i,"БАНК.РПО_КОДБЮДЖ"))<0 or Int(GetFieldS(OWA,i,"БАНК.РПО_КОДБЮДЖ"))>6: AddMsg("Недопустимый код уровня бюджета "+GetFieldS(OWA,i,"БАНК.РПО_КОДБЮДЖ"),n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,5,GetFieldS(OWA,i,"Рекв.РПО_КБП"),"Код клиента (код получателя бюджетных средств)",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OWA,i,"Рекв.ПОЛНИМЯ"),"Наименование клиента",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (-1,-255,GetFieldS(OWA,i,"Рекв.РПО_ПОЛНИМЯ2"),"Наименование клиента",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,4,GetFieldS(OWA,i,"БАНК.РПО_ОФК_КОД"),"Код ОФК",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OWA,i,"БАНК.РПО_ОФК_ИМЯ"),"Наименование ОФК",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (-1,-255,GetFieldS(OWA,i,"БАНК.РПО_ОФК_ИМЯ2"),"Наименование ОФК",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,11,GetFieldS(OWA,i,"БАНК.РПО_ЛСЧЕТ"),"Номер лицевого счета",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,3,GetFieldS(OWA,i,"ГЛАВА"),"Глава по БК",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OWA,i,"ГРБС"),"Главный распорядитель бюджетных средств",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OWA,i,"БАНК.РПО_НАИМБЮДЖ"),"Наименование бюджета",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OWA,i,"БАНК.РПО_ФО_НАИМ1"),"Финансовый орган",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (-1,-255,GetFieldS(OWA,i,"БАНК.РПО_ФО_НАИМ2"),"Финансовый орган",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,8,GetFieldS(OWA,i,"БАНК.РПО_ФО_ОКПО"),"ОКПО финансового органа (код можно найти в выписке)",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (-1,-100,GetFieldS(OWA,i,"ДОЛЖНРУК"),"Должность руководителя",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      tmp=ПроверкаНаСтандарт (1,-50,GetFieldS(OWA,i,"ФИОРУК"),"ФИО руководителя",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      if GetFieldD(OWA,i,"ДАТАПОДПИСИ")=1.1.100: AddMsg("Не указана дата подписания документа",n,True);  fi;
      --
      if ТипДок=0 and (fGUID_FK or GetFieldL(OWA,i,"GUID_FK_Разреш")):
         tmp=ПроверкаНаСтандарт (-1,36,GetFieldS(OWA,i,"GUID_FK"),"Глобальный уникальный идентификатор",n);
         if tmp<>"" : AddMsg(tmp,n,True); fi;
      fi;
      --Внутренний номер (для выгрузки)
      if ТипДок=1:
         if GetFieldI(OWA,i,"Изм_ФорматНомер")=0:
            tmp=ПроверкаНаСтандарт (1,-50,GetFieldS(OWA,i,"Изм_НомерДок"),"Номер заявки",n);
           else
            tmp=ПроверкаНаСтандарт (1,-50,GetFieldS(OWA,i,"Изм_Префикс")+GetFieldS(OWA,i,"Изм_Сепаратор")+GetFieldS(OWA,i,"Изм_НомерДок"),"Номер заявки",n);
         fi;
        else
         if GetFieldI(OWA,i,"ФорматНомер")=0:
            tmp=ПроверкаНаСтандарт (1,-50,GetFieldS(OWA,i,"НомерДок"),if(ТипДок=0,"Номер сведений","Номер заявки"),n);
           else
            tmp=ПроверкаНаСтандарт (1,-50,GetFieldS(OWA,i,"Префикс")+GetFieldS(OWA,i,"Сепаратор")+GetFieldS(OWA,i,"НомерДок"),if(ТипДок=0,"Номер сведений","Номер заявки"),n);
         fi;
      fi;
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --Регистрационный номер (для изменений)
      if ТипДок>0:
         tmp=ПроверкаНаСтандарт (1,16,GetFieldS(OWA,i,"РегНомер"),"Учетный номер БО",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
      fi;
      if ТипДок=0 or ТипДок=2:
         if GetFieldD(OWA,i,"ДатаДок")=1.1.100: AddMsg("Не указана дата составления документа",n,True);  fi;
         if GetFieldD(OWA,i,"ДатаДок")>ДатаРейс: AddMsg("Дата составления документа не может быть больше даты передачи файла",n,True);  fi;
        |ТипДок=1:
         if GetFieldD(OWA,i,"Изм_ДатаДок")=1.1.100: AddMsg("Не указана дата составления документа",n,True);  fi;
         if GetFieldD(OWA,i,"Изм_ДатаДок")>ДатаРейс: AddMsg("Дата составления документа не может быть больше даты передачи файла",n,True);  fi;
      fi;
      if not flagОсн then AddMsg('Раздел 1 не заполнен',n,True);   fi;
--      if not f20130901:
--         tmp=ПроверкаНаСтандарт (1,-100,GetFieldS(OWA,i,"Осн_ДокВид"),"Вид документа-основания",n);
--         if tmp<>"" : AddMsg(tmp,n,True);   fi;
--         tmp=GetFieldS(OWA,i,"Осн_ДокВид");
--         if not (tmp="Государственный контракт" or tmp="Договор" or tmp="Соглашение" or tmp="-"):
--            AddMsg("Недопустимый вид документа-основания '"+tmp+"'",n,True);
--         fi;
--      fi;
      tmp=ПроверкаНаСтандарт (1,-45,GetFieldS(OWA,i,"Осн_ДокНом"),"Номер документа-основания",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      if GetFieldD(OWA,i,"Осн_ДокДат")=1.1.100: AddMsg("Не указана дата подписания документа-основания",n,True);  fi;
--      if GetFieldD(OWA,i,"Осн_ДокДН")=1.1.100 and not f20130901: AddMsg("Не указана дата начала действия",n,True);  fi;
      if not flagИсп:
         if ТипДок=0 or ТипДок=2:
            if Round(GetFieldN(OWA,i,"Осн_ДокСум"),2)=0: AddMsg("Не указана сумма документа-основания",n,True);  fi;
         fi;
         tmp=ПроверкаНаСтандарт (1,3,GetFieldS(OWA,i,"Осн_ДокОКВ"),"Код валюты документа-основания",n);
         if Int(GetFieldS(OWA,i,"Осн_ДокОКВ"))=0 and not GetFieldS(OWA,i,"Осн_ДокОКВ")="000":
            AddMsg("Код валюты должен быть числом",n,True);
         fi;
--         if not Round(GetFieldN(OWA,i,"Осн_ДокСум"),2)=0 and Round(GetFieldN(OWA,i,"Осн_ДокСумРуб"),2)=0 and (not GetFieldS(OWA,i,"Осн_ДокОКВ")="643" or setЗаполР1_Гр8 or f20130901):
         if not Round(GetFieldN(OWA,i,"Осн_ДокСум"),2)=0 and Round(GetFieldN(OWA,i,"Осн_ДокСумРуб"),2)=0:
            AddMsg("Не указана сумма документа-основания в валюте Российской Федерации",n,True);
         fi;
         if not RoundПроцАв(GetFieldN(OWA,i,"Осн_ДокПроцАв"))=0:
            if not RoundПроцАв(GetFieldN(OWA,i,"Осн_ДокПроцАв"))=RoundПроцАв(GetFieldN(OWA,i,"Осн_ДокСумАв")*100/GetFieldN(OWA,i,"Осн_ДокСум")): AddMsg("Указанный процент авансового платежа ("+Str(RoundПроцАв(GetFieldN(OWA,i,"Осн_ДокПроцАв")),4)+") не равен проценту исчисленного от общей суммы документа ("+Str(RoundПроцАв(GetFieldN(OWA,i,"Осн_ДокСумАв")*100/GetFieldN(OWA,i,"Осн_ДокСум")),4)+")",n,False); fi;
         fi;
         if Round(GetFieldN(OWA,i,"Осн_ДокСумАв"),2)>Round(GetFieldN(OWA,i,"Осн_ДокСум"),2) and not Round(GetFieldN(OWA,i,"Осн_ДокСум"),2)=0: AddMsg("Сумма аванса не может превышать сумму документа-основания",n,True); fi;
      fi;
      if not flagКонтр then AddMsg('Раздел 2 не заполнен',n,True);   fi;
      if GetFieldR(OWA,i,"РеквП")=nil: 
         AddMsg("Не указан контрагент",n,True);
        else
         tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OWA,i,"РеквП.ПолнИмя"),"Наименование контрагента",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
         p=Pos("  ",GetFieldS(OWA,i,"РеквП.ПолнИмя"));
         if not p=0:
            AddMsg("Наименование контрагента содержит двойные пробелы на позиции "+Str(p),n,False);
         fi;
         val=GetFieldS(OWA,i,"РЕКВП.ИНН");
         if not val="":
            if not (Length(val)=10 or Length(val)=12):
               AddMsg("ИНН контрагента должен содержать 10 или 12 знаков",n,True);
            fi;
         fi;
         tmp=ПроверкаНаСтандарт (-1,9,GetFieldS(OWA,i,"РЕКВП.КПП"),"КПП контрагента",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
--         if not f20130901:
--            tmp=ПроверкаНаСтандарт (1,-80,GetFieldS(OWA,i,"РЕКВП.РПО_СТРАНА"),"Наименование страны регистрации контрагента",n);
--            if tmp<>"" : AddMsg(tmp,n,True);   fi;
--            if GetFieldI(OWA,i,"РЕКВП.Тип")=0:
--               tmp=ПроверкаНаСтандарт (1,-3,GetFieldS(OWA,i,"РЕКВП.РПО_ОКСМ"),"Код страны контрагента по ОКСМ",n);
--               if tmp<>"" : AddMsg(tmp,n,True);   fi;
--            fi;
--            tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OWA,i,"РЕКВП.ЮРАДРЕС"),"Юридический адрес контрагента",n);
--            if tmp<>"" : AddMsg(tmp,n,True);   fi;
--            tmp=ПроверкаНаСтандарт (-1,-50,if(GetFieldS(OWA,i,"РЕКВП.ТЕЛЕФОН")="",GetFieldS(OWA,i,"РЕКВП.ФАКС"),GetFieldS(OWA,i,"РЕКВП.ТЕЛЕФОН")),"Телефон (факс) контрагента",n);
--            if tmp<>"" : AddMsg(tmp,n,True);   fi;
--            tmp=ПроверкаНаСтандарт (-1,1,GetFieldS(OWA,i,"РЕКВП.РПО_СТАТУС"),"Код статуса контрагента",n);
--            if tmp<>"" : AddMsg(tmp,n,True);   fi;
--         fi;
      fi;
--      if not GetFieldR(OWA,i,"БАНКП")=nil and not f20130901:
--         tmp=ПроверкаНаСтандарт (0,20,GetFieldS(OWA,i,"БАНКП.РСЧЕТ"),"Номер банковского счета контрагента",n);
--         if tmp<>"" : AddMsg(tmp,n,True);   fi;
--         tmp=ПроверкаНаСтандарт (1,-160,GetFieldS(OWA,i,"БАНКП.БАНК")+if(fДобГородВБанк," "+GetFieldS(OWA,i,"БАНКП.ГОРОД"),""),"Наименование банка контрагента",n);
--         if tmp<>"" : AddMsg(tmp,n,True);   fi;
--         tmp=ПроверкаНаСтандарт (1,9,GetFieldS(OWA,i,"БАНКП.БИК"),"БИК банка контрагента",n);
--         if tmp<>"" : AddMsg(tmp,n,True);   fi;
--         tmp=ПроверкаНаСтандарт (0,20,GetFieldS(OWA,i,"БАНКП.КСЧЕТ"),"Корр. счет банка контрагента",n);
--         if tmp<>"" : AddMsg(tmp,n,True);   fi;
--      fi;
      OA=OpenArray(OWA,i,"Раздел2","");
      nr2=Records(OA);
      for n2=1.. nr2 do
       if GetFieldR(OA,n2,"РеквП")=nil:
          AddMsg("Не указан контрагент №"+Str(n2+1),n,True);
         else
          tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OA,n2,"РеквП.ПолнИмя"),"Наименование контрагента №"+Str(n2+1),n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          p=Pos("  ",GetFieldS(OA,n2,"РеквП.ПолнИмя"));
          if not p=0:
             AddMsg("Наименование контрагента "+Str(n2+1)+" содержит двойные пробелы на позиции "+Str(p),n,False);
          fi;
          val=GetFieldS(OA,n2,"РЕКВП.ИНН");
          if not val="":
             if not (Length(val)=10 or Length(val)=12):
                AddMsg("ИНН контрагента №"+Str(n2+1)+" должен содержать 10 или 12 знаков",n,True);
             fi;
          fi;
          tmp=ПроверкаНаСтандарт (-1,9,GetFieldS(OA,n2,"РЕКВП.КПП"),"КПП контрагента №"+Str(n2+1),n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
--          if not f20130901:
--             tmp=ПроверкаНаСтандарт (1,-80,GetFieldS(OA,n2,"РЕКВП.РПО_СТРАНА"),"Наименование страны регистрации контрагента №"+Str(n2+1),n);
--             if tmp<>"" : AddMsg(tmp,n,True);   fi;
--             if GetFieldI(OA,n2,"РЕКВП.Тип")=0:
--                tmp=ПроверкаНаСтандарт (1,-3,GetFieldS(OA,n2,"РЕКВП.РПО_ОКСМ"),"Код страны контрагента по ОКСМ №"+Str(n2+1),n);
--                if tmp<>"" : AddMsg(tmp,n,True);   fi;
--             fi;
--             tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OA,n2,"РЕКВП.ЮРАДРЕС"),"Юридический адрес контрагента №"+Str(n2+1),n);
--             if tmp<>"" : AddMsg(tmp,n,True);   fi;
--             tmp=ПроверкаНаСтандарт (-1,-50,if(GetFieldS(OA,n2,"РЕКВП.ТЕЛЕФОН")="",GetFieldS(OA,n2,"РЕКВП.ФАКС"),GetFieldS(OA,n2,"РЕКВП.ТЕЛЕФОН")),"Телефон (факс) контрагента №"+Str(n2+1),n);
--             if tmp<>"" : AddMsg(tmp,n,True);   fi;
--             tmp=ПроверкаНаСтандарт (-1,1,GetFieldS(OA,n2,"РЕКВП.РПО_СТАТУС"),"Код статуса контрагента №"+Str(n2+1),n);
--             if tmp<>"" : AddMsg(tmp,n,True);   fi;
--          fi;
       fi;
--       if not GetFieldR(OA,n2,"БАНКП")=nil and not f20130901:
--          tmp=ПроверкаНаСтандарт (0,20,GetFieldS(OA,n2,"БАНКП.РСЧЕТ"),"Номер банковского счета контрагента  №"+Str(n2+1),n);
--          if tmp<>"" : AddMsg(tmp,n,True);   fi;
--          tmp=ПроверкаНаСтандарт (1,-160,GetFieldS(OA,n2,"БАНКП.БАНК")+if(fДобГородВБанк," "+GetFieldS(OA,n2,"БАНКП.ГОРОД"),""),"Наименование банка контрагента  №"+Str(n2+1),n);
--          if tmp<>"" : AddMsg(tmp,n,True);   fi;
--          tmp=ПроверкаНаСтандарт (1,9,GetFieldS(OA,n2,"БАНКП.БИК"),"БИК банка контрагента №"+Str(n2+1),n);
--          if tmp<>"" : AddMsg(tmp,n,True);   fi;
--          tmp=ПроверкаНаСтандарт (0,20,GetFieldS(OA,n2,"БАНКП.КСЧЕТ"),"Корр. счет банка контрагента №"+Str(n2+1),n);
--          if tmp<>"" : AddMsg(tmp,n,True);   fi;
--       fi;
      od;
      CloseWorkArea(OA);
      if flagИсп:
         if flagДоп: AddMsg("Раздел 3 не заполняется, при заполненом разделе 4",n,True); fi;
         tmp=ПроверкаНаСтандарт (1,-50,GetFieldS(OWA,i,"ИСП_ДОКНОМ"),"Номер исполнительного документа",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
         if GetFieldD(OWA,i,"ИСП_ДОКДАТ")=1.1.100: AddMsg("Не указана дата выдачи исполнительного документа",n,True);  fi;
         tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OWA,i,"ИСП_ОРГАН"),"Наименование судебного органа",n);
         if Round(GetFieldN(OWA,i,"ИСП_ДОКСУМ"),2)=0: AddMsg("Не указана сумма по исполнительному документу",n,True);  fi;
         tmp=ПроверкаНаСтандарт (1,-15,GetFieldS(OWA,i,"ИСП_УВЕДНОМ"),"Номер уведомления о поступлении исполнительного документа",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
         if GetFieldD(OWA,i,"ИСП_УВЕДДАТ")=1.1.100: AddMsg("Дата уведомления о поступлении исполнительного документа",n,True);  fi;
      fi;
      if flagДоп:
         if flagИсп: AddMsg("Раздел 4 не заполняется, при заполненом разделе 3",n,True); fi;
--         if not f20130901:
--            tmp=ПроверкаНаСтандарт (1,-2,GetFieldS(OWA,i,"Доп_РазмещЗаказ"),"Способ размещения заказа",n);
--            if tmp<>"" : AddMsg(tmp,n,True);   fi;
--            tmp=GetFieldS(OWA,i,"Доп_РазмещЗаказ");
----            if GetFieldD(OWA,i,"Доп_ДатаИтог")=1.1.100 and not (tmp="6" or tmp="7" or tmp="8"): AddMsg("Не указана дата подведения итогов конкурса, аукциона, запроса котировок",n,True);  fi;
--            tmp=ПроверкаНаСтандарт (1,-160,GetFieldS(OWA,i,"Доп_ВидДокОсн"),"Вид документа подтверждающего заключение госконтракта",n);
--            if tmp<>"" : AddMsg(tmp,n,True);   fi;
--            tmp=ПроверкаНаСтандарт (1,-254,GetFieldS(OWA,i,"Доп_НомДокОсн"),"Номер документа подтверждающего заключение госконтракта",n);
--            if tmp<>"" : AddMsg(tmp,n,True);   fi;
--            if GetFieldD(OWA,i,"Доп_ДатаДокОсн")=1.1.100: AddMsg("Не указана дата документа подтверждающего заключение госконтракта",n,True);  fi;
----            tmp=ПроверкаНаСтандарт (1,if(Int(GetFieldS(OWA,i,"Доп_РазмещЗаказ"))<=6,19,13),GetFieldS(OWA,i,"Доп_Ном_Реестр"),"Номер записи в реестре госконтрактов",n);
--            tmp=ПроверкаНаСтандарт (1,-19,GetFieldS(OWA,i,"Доп_Ном_Реестр"),"Номер записи в реестре госконтрактов",n);
--            if tmp<>"" : AddMsg(tmp,n,True);   fi;
--           else
--            val=GetFieldS(OWA,i,"Доп_Ном_Реестр");
--            if not (Length(Val)=13 or Length(Val)=19):
--               AddMsg("Номер записи в реестре госконтрактов должен содержать 13 или 19 знаков",n,True);
--            fi;
--         fi;
         val=GetFieldS(OWA,i,"Доп_Ном_Реестр");
         if not (Length(Val)=13 or Length(Val)=19):
            AddMsg("Номер записи в реестре госконтрактов должен содержать 13 или 19 знаков",n,True);
         fi;
      fi;
      nr2=РасчетРаздела(OWA,i);
      if nr2=0: AddMsg("Раздел 5 не заполнен",n,True); fi;
      for n2=1.. nr2 do
       if isФАИП:
          tmp=ПроверкаНаСтандарт ( 1,-255,BufФАИП_Наим1[n2],"Наименование объекта ФАИП(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (-1,-255,BufФАИП_Наим2[n2],"Наименование объекта ФАИП(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (-1,-255,BufФАИП_Наим3[n2],"Наименование объекта ФАИП(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (-1,-255,BufФАИП_Наим4[n2],"Наименование объекта ФАИП(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (1,14,BufФАИП_Код[n2],"Код объекта ФАИП(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
         else
          tmp=ПроверкаНаСтандарт (1,1,BufИст[n2],"Вид средств(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          if not (BufИст[n2]="1" or BufИст[n2]="3"):
             AddMsg("Недопустимый вид средств "+val+" (стр.№"+Str(n2)+")",n,True);
          fi;
          tmp=ПроверкаНаСтандарт (1,20,BufКБК[n2],"Код по БК(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (1,2,BufТипКБК[n2],"Тип КБК(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          if not (BufТипКБК[n2]="10" or BufТипКБК[n2]="31" or BufТипКБК[n2]="32"):
             AddMsg("Недопустимый тип КБК "+BufТипКБК[n2]+" (стр.№"+Str(n2)+")",n,True);
          fi;
          tmp=ПроверкаНаСтандарт (1,-255,BufПредм1[n2],"Предмет по документу-основанию(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (-1,-255,BufПредм2[n2],"Предмет по документу-основанию(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (-1,-255,BufПредм3[n2],"Предмет по документу-основанию(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (-1,-255,BufПредм4[n2],"Предмет по документу-основанию(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (-1,-254,BufПримеч[n2],"Примечание(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
          tmp=ПроверкаНаСтандарт (-1,-20,BufДопКл[n2],"Код цели(стр.№"+Str(n2)+")",n);
          if tmp<>"" : AddMsg(tmp,n,True);   fi;
       fi;
      od;
      if GetFieldI(OWA,i,"НомРейс")<>0 and GetFieldD(OWA,i,"ДатаРейс")<>1.1.100: 
        Msg[n]=Msg[n]+if(Msg[n]='','',Chr(13))+if(ТипДок=0,"Сведения","Заявка")+" уже выгружались рейсом №"+Str(GetFieldI(OWA,i,"НомРейс"))+" от "+DateToString(GetFieldD(OWA,i,"ДатаРейс"));
      fi;
      РасчетГЭК(OWA,i,n);
     else
      AddMsg("Документ не найден",n,True);
   fi;
   if Msg[n]='': Msg[n]="Проверка пройдена"; fi;
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 ^True;
end;

Proc НомРейсСлед;
var OWA,nr:I;
 if ДатаРейс=1.1.100: Message("Введите дату формирования документов (файла)",mtError); Template.Field="ДатаРейс"; Exit; fi;
 OWA=OpenWorkArea(SelfCrd,"НомРейс","ДатаРейс>="+DateToString(ДатаРейс)+" and ДатаРейс<="+DateToString(ДатаРейс));
 Try
  Nr=Records(OWA);
  if Nr=0: 
     НомРейс_=1;
    else
     НомРейс_=Abs(GetFieldI(OWA,Nr,"НомРейс"))+1;
     if FlagВЛВС:
        if НомРейс_<1 or НомРейс_>288 : Message("Выход за границы диапазона номеров 1..288 для выделенной ЛВС",mtError); fi;
       else
        if НомРейс_<1 or НомРейс_>1007: Message("Выход за границы диапазона номеров 1..1007",mtError); fi;
     fi;
  fi;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Func НомРейсИспользуется (ДР:D; НР:I):L;
var OWA:I;
 OWA=OpenWorkArea(SelfCrd,"","НомРейс="+Str(НР)+" and ДатаРейс>="+DateToString(ДР)+" and ДатаРейс<="+DateToString(ДР));
 Try
  if Records(OWA)=0: ^False; else ^True; fi;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Proc ЗаполнитьСтроку (OWA:I; n:I; Iter:I; Rec: Record);
 if Rec=nil:
    if ТипДок=1:
       Ном[Iter]=if(GetFieldI(OWA,n,"Изм_ФорматНомер")=0,"",GetFieldS(OWA,n,"Изм_Префикс")+GetFieldS(OWA,n,"Изм_Сепаратор"))+GetFieldS(OWA,n,"Изм_НомерДок")+Chr(13)+"("+GetFieldS(OWA,n,"РегНомер")+")";
       Дат[Iter]=GetFieldD(OWA,n,"Изм_ДатаДок");
      else
       Ном[Iter]=if(GetFieldI(OWA,n,"ФорматНомер")=0,"",GetFieldS(OWA,n,"Префикс")+GetFieldS(OWA,n,"Сепаратор"))+GetFieldS(OWA,n,"НомерДок")+if(ТипДок=2,Chr(13)+"("+GetFieldS(OWA,n,"РегНомер")+")","");
       Дат[Iter]=GetFieldD(OWA,n,"ДатаДок");
    fi;
    Сум[Iter]=GetFieldN(OWA,n,"Осн_ДокСум");
    ДокОсн[Iter]=GetFieldS(OWA,n,"Осн_ДокВид");
    ДокОсн[Iter]=ДокОсн[Iter]+" № "+GetFieldS(OWA,n,"Осн_ДокНом");
    ДокОсн[Iter]=ДокОсн[Iter]+" от "+DateToString(GetFieldD(OWA,n,"Осн_ДокДат"));
    if not GetFieldS(OWA,n,"Исп_ДокНом")="":
       Сум[Iter]=GetFieldN(OWA,n,"Исп_ДокСум");
       ДокОсн[Iter]=ДокОсн[Iter]+" (Испол. док. № ";
       ДокОсн[Iter]=ДокОсн[Iter]+GetFieldS(OWA,n,"Исп_ДокНом");
       ДокОсн[Iter]=ДокОсн[Iter]+" от "+DateToString(GetFieldD(OWA,n,"Исп_ДокДат"))+")";
    fi;
    Контр[Iter]=GetFieldS(OWA,n,"РеквП.КорИмя");
    UKey[Iter]=GetRecordKey(OWA,n);
   else
    OWA=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(Rec));
    Try
     ЗаполнитьСтроку(OWA,1,Iter,nil);
    Finally
     CloseWorkArea(OWA);
    end;
 fi;
end;

Proc ЗагрузитьРейс (ДР:D; НР:I);
var OWA,n,nr:I;
 Очистить;
 OWA=OpenWorkArea(SelfCrd,"","НомРейс="+Str(НР)+" and ДатаРейс>="+DateToString(ДР)+" and ДатаРейс<="+DateToString(ДР));
 FlagВБанк=False;
 Try
  Nr=Records(OWA);
  for n=1..Nr do
   InsertFrame(Упр,Упр+1);
   ЗаполнитьСтроку(OWA,n,Упр,nil);
  od;
 Finally
  CloseWorkArea(OWA);
 end;
 Проверить(0,False);
end;


Proc ВыгрузитьРейс;
var OWA,F,Iter,n,nn,w,ww,state,i,OAКонтр:I;
var Buf,Cache,tmp,Ном_:S;
var flagОсн,flagКонтр,flagИсп,flagДоп,flagГЭК:L;
 flagГЭК=False;
 State=0;
 Cache=PlanVar("CACHE")+"\";
 for Iter=1..Упр do
  Wrng[Iter]=0;
  Err[Iter]=0;
  Msg[Iter]="Ожидание выгрузки...";
 od;
 OWA=OpenWorkArea(SelfCrd,"");
 Try
  ShowProgress(Упр,"Формирование рейса....");
  for Iter=1..Упр do
   ProgressPos(Iter);
   i=GetRecordNumber(OWA,UKey[Iter]);
   flagОсн=(GetFieldS(OWA,i,"ОСН_ДОКНОМ")<>'' or GetFieldD(OWA,i,"ОСН_ДОКДАТ")<>1.1.100 or GetFieldN(OWA,i,"ОСН_ДОКСУМ")<>0 or GetFieldN(OWA,i,"ОСН_ДОКСУМРУБ")<>0 or GetFieldN(OWA,i,"ОСН_ДОКПРОЦАВ")<>0 or GetFieldN(OWA,i,"ОСН_ДОКСУМАВ")<>0);
   flagКонтр=GetFieldR(OWA,i,"РЕКВП")<>nil;
   flagИсп=(GetFieldS(OWA,i,"ИСП_ДОКНОМ")<>'' or GetFieldD(OWA,i,"ИСП_ДОКДАТ")<>1.1.100 or GetFieldS(OWA,i,"ИСП_ОРГАН")<>'' or GetFieldN(OWA,i,"ИСП_ДОКСУМ")<>0 or GetFieldS(OWA,i,"ИСП_УВЕДНОМ")<>'' or GetFieldD(OWA,i,"ИСП_УВЕДДАТ")<>1.1.100);
   flagДоп=not GetFieldS(OWA,i,"Доп_Ном_Реестр")="";
   if Iter=1: OAКонтр=OpenArray(OWA,i,"Раздел2",""); fi;
   if not State=4 and not State=3 and ExistFile(Folder+ИмяРейс):
       State=Enquiry("","Файл '"+Folder+ИмяРейс+"' уже существует, перезаписать ?","Нет;Да;Нет для всех;Да для всех;Отмена",mtWarning);
       if State=5: 
          for n=Iter..Упр do
           Err[n]=Err[n]+1;
           Msg[n]="Отказ от выгрузки";
          od;
          Message("Отказ от выгрузки",mtWarning);
          Exit;
       fi;
   fi;
   if State=1 or State=3:
      Err[n]=Err[n]+1;
      Msg[n]="Файл уже существует. Выгрузка не производилась";
     else
      F=TextFileCreate(Folder+ИмяРейс);
      Try
       Try
        TextFileWriteLn(F,Head);
        --Почтовая информация от отправителе файла
        TextFileAppendLn(F,"FROM|");
        --Уровень бюджета
        Buf=GetFieldS(OWA,i,"БАНК.РПО_КОДБЮДЖ");
        Buf=SubStr(Buf,1,1);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код получателя бюджетных средств
        Buf=GetFieldS(OWA,i,"РЕКВ.РПО_КБП");
        Buf=SubStr(Buf,1,5);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Полное наименование получателя бюджетных средств
        Buf=GetFieldS(OWA,i,"РЕКВ.ПОЛНИМЯ");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        Buf=GetFieldS(OWA,i,"РЕКВ.РПО_ПОЛНИМЯ2");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код ОрФК
        TextFileAppendLn(F,"|");
        --Наименование ОрФК
        TextFileWriteLn(F,"|");
        --Почтовая информация о получателе файла
        TextFileAppendLn(F,"TO|");
        --Уровень бюджета клиента
        TextFileAppendLn(F,"|");
        --Код клиента
        TextFileAppendLn(F,"|");
        --Наименование клиента
        TextFileAppendLn(F,"|");
        --Код ТОФК
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ОФК_КОД");
        Buf=SubStr(Buf,1,4);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование органа ФК- получателя
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ОФК_ИМЯ");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ОФК_ИМЯ2");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        TextFileWriteLn(F,"|");
        --Реквизиты документа основания
        if ТипДок=0:
           TextFileAppendLn(F,"BN|");
          |ТипДок=1:
           TextFileAppendLn(F,"BC|");
          |ТипДок=2:
           TextFileAppendLn(F,"BS|");
        fi;
        --Глобальный идентификатор
        if ТипДок=0 and (fGUID_FK or GetFieldL(OWA,i,"GUID_FK_Разреш")):
           Buf=GetFieldS(OWA,i,"GUID_FK");
           Buf=SubStr(Buf,1,36);
           TextFileAppendLn(F,Buf);
        fi;
        TextFileAppendLn(F,"|");
        --Номер сведений об обязательстве(заявки)
        if ТипДок=0:
           Buf=if(GetFieldI(OWA,i,"ФорматНомер")=0,"",GetFieldS(OWA,i,"Префикс")+GetFieldS(OWA,i,"Сепаратор"))+GetFieldS(OWA,i,"НомерДок");
          |ТипДок=1:
           Buf=if(GetFieldI(OWA,i,"Изм_ФорматНомер")=0,"",GetFieldS(OWA,i,"Изм_Префикс")+GetFieldS(OWA,i,"Изм_Сепаратор"))+GetFieldS(OWA,i,"Изм_НомерДок");
        fi;
        if ТипДок=0 or ТипДок=1:
           Buf=fixN(SubStr(Buf,1,50));
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
        fi;
        --Учетный номер БО
        if ТипДок>0:
           Buf=GetFieldS(OWA,i,"РегНомер");
           Buf=fixN(SubStr(Buf,1,16));
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
        fi;
        --Дата составления документа
        if ТипДок=0: Buf=DateToString(GetFieldD(OWA,i,"ДатаДок"));
          |ТипДок=1: Buf=DateToString(GetFieldD(OWA,i,"Изм_ДатаДок"));
          |ТипДок=2: Buf=DateToString(GetFieldD(OWA,i,"ДатаДок"));
          |True: Buf="";
        fi;
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код получателя бюджетных средств
        Buf=GetFieldS(OWA,i,"РЕКВ.РПО_КБП");
        Buf=SubStr(Buf,1,5);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Полное наименование получателя бюджетных средств
        Buf=GetFieldS(OWA,i,"РЕКВ.ПОЛНИМЯ");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        Buf=GetFieldS(OWA,i,"РЕКВ.РПО_ПОЛНИМЯ2");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Номер лицевого счета получателя
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ЛСЧЕТ");
        Buf=fixN(SubStr(Buf,1,11));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Глава по БК
        Buf=GetFieldS(OWA,i,"ГЛАВА");
        Buf=fixN(SubStr(Buf,1,3));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Главный распорядитель бюджетных средств
        Buf=GetFieldS(OWA,i,"ГРБС");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование бюджета
        Buf=GetFieldS(OWA,i,"БАНК.РПО_НАИМБЮДЖ");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код по ОКПО
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ФО_ОКПО");
        Buf=fixN(SubStr(Buf,1,8));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Финансовый орган
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ФО_НАИМ1");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ФО_НАИМ2");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код ТОФК
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ОФК_КОД");
        Buf=SubStr(Buf,1,4);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование органа ФК
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ОФК_ИМЯ");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        Buf=GetFieldS(OWA,i,"БАНК.РПО_ОФК_ИМЯ2");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Должность руководителя
        Buf=GetFieldS(OWA,i,"ДОЛЖНРУК");
        Buf=fixN(SubStr(Buf,1,100));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --ФИО руководителя
        Buf=GetFieldS(OWA,i,"ФИОРУК");
        Buf=fixN(SubStr(Buf,1,50));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Дата подписания документа
        Buf=DateToString(GetFieldD(OWA,i,"ДАТАПОДПИСИ"));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        if ТипДок=0:
           --Номер БО
           TextFileAppendLn(F,"|");
           --Дата постановки на учет
           TextFileAppendLn(F,"|");
        fi;
        --Примечание
        TextFileAppendLn(F,"|");
        --Должность исполнителя
        TextFileAppendLn(F,"|");
        --ФИО исполнителя
        TextFileAppendLn(F,"|");
        --Телефон Исполнителя
        TextFileAppendLn(F,"|");
        --Дата регистрации заявки
        if ТипДок=1 or ТипДок=2:
           TextFileAppendLn(F,"|");
        fi;
        TextFileWriteLn(F,"");
        --Реквизиты документа-основания
        if ТипДок=0:
           TextFileAppendLn(F,"BNOSN|");
          |ТипДок=1:
           TextFileAppendLn(F,"BCOSN|");
          |ТипДок=2:
           TextFileAppendLn(F,"BSOSN|");
        fi;
        --Вид
--        if not f20130901:
--           Buf=GetFieldS(OWA,i,"ОСН_ДОКВИД");
--           Buf=fixN(SubStr(Buf,1,100));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Номер
        Buf=GetFieldS(OWA,i,"ОСН_ДОКНОМ");
        Buf=fixN(SubStr(Buf,1,45));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Дата
        Buf=DateToString(GetFieldD(OWA,i,"ОСН_ДОКДАТ"));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Дата начала действия
--        if not f20130901:
--           Buf=DateToString(GetFieldD(OWA,i,"ОСН_ДОКДН"));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Дата окончания действия
--        if not f20130901:
--           Buf=if(GetFieldD(OWA,i,"ОСН_ДОКДК")=1.1.100,"",DateToString(GetFieldD(OWA,i,"ОСН_ДОКДК")));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Сумма в валюте обязательства
        if flagИсп:
           Buf="";
          else
           Buf=Str(GetFieldN(OWA,i,"ОСН_ДОКСУМ"),2);
        fi;
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код валюты по ОКВ
        if flagИсп:
           Buf="";
          else
           Buf=GetFieldS(OWA,i,"ОСН_ДОКОКВ");
           Buf=fixN(SubStr(Buf,1,3));
        fi;
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Сумма в валюте РФ
        if flagИсп:
           Buf="";
          else
           Buf=Str(GetFieldN(OWA,i,"ОСН_ДОКСУМРУБ"),2);
        fi;
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Авансовый платеж
        if flagИсп:
           Buf="";
          else
           Buf=Str(RoundПроцАв(GetFieldN(OWA,i,"ОСН_ДОКПРОЦАВ")),4);
           if Buf="0.0000" then Buf=""; fi;
        fi;
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Сумма авансового платежа
        if flagИсп:
           Buf="";
          else
           Buf=Str(GetFieldN(OWA,i,"ОСН_ДОКСУМАВ"),2);
        fi;
        TextFileAppendLn(F,Buf);
        TextFileWriteLn(F,"|");
        --Реквизиты контрагента
        if ТипДок=0:
           TextFileAppendLn(F,"BNCONTR|");
          |ТипДок=1:
           TextFileAppendLn(F,"BCCONTR|");
          |ТипДок=2:
           TextFileAppendLn(F,"BSCONTR|");
        fi;
        --Наименование(ФИО) контрагента
        Buf=GetFieldS(OWA,i,"РЕКВП.ПОЛНИМЯ");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        Buf=GetFieldS(OWA,i,"РЕКВП.РПО_ПОЛНИМЯ2");
        Buf=fixN(SubStr(Buf,1,255));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --ИНН
        Buf=GetFieldS(OWA,i,"РЕКВП.ИНН");
        Buf=fixN(SubStr(Buf,1,12));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --КПП
        Buf=GetFieldS(OWA,i,"РЕКВП.КПП");
        Buf=fixN(SubStr(Buf,1,9));
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Страна юр. адреса
--        if not f20130901:
--           Buf=GetFieldS(OWA,i,"РЕКВП.РПО_СТРАНА");
--           Buf=fixN(SubStr(Buf,1,80));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код страны по ОКСМ
--        if not f20130901:
--           Buf=GetFieldS(OWA,i,"РЕКВП.РПО_ОКСМ");
--           Buf=fixN(SubStr(Buf,1,3));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Юридический адрес
--        if not f20130901:
--           Buf=GetFieldS(OWA,i,"РЕКВП.ЮРАДРЕС");
--           Buf=fixN(SubStr(Buf,1,255));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Телефон (факс)
--        if not f20130901:
--           Buf=GetFieldS(OWA,i,"РЕКВП.ТЕЛЕФОН");
--           if Buf="":
--              Buf=GetFieldS(OWA,i,"РЕКВП.ФАКС");
--           fi;
--           Buf=fixN(SubStr(Buf,1,50));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код статуса
--        if not f20130901:
--           Buf=GetFieldS(OWA,i,"РЕКВП.РПО_СТАТУС");
--           Buf=fixN(SubStr(Buf,1,1));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
--        --Номер банковского счета
--        БанкП_=GetFieldR(OWA,i,"БАНКП");
--        if not БанкП_=nil and not f20130901:
--           Buf=GetFieldS(OWA,i,"БАНКП.РСЧЕТ");
--           Buf=fixN(SubStr(Buf,1,20));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование банка
--        if not БанкП_=nil and not f20130901:
--           Buf=GetFieldS(OWA,i,"БАНКП.БАНК")+if(fДобГородВБанк," "+GetFieldS(OWA,i,"БАНКП.ГОРОД"),"");
--           Buf=fixN(SubStr(Buf,1,160));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --БИК банка
--        if not БанкП_=nil and not f20130901:
--           Buf=GetFieldS(OWA,i,"БАНКП.БИК");
--           Buf=fixN(SubStr(Buf,1,9));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Корр.счет банка
--        if not БанкП_=nil and not f20130901:
--           Buf=GetFieldS(OWA,i,"БАНКП.КСЧЕТ");
--           Buf=fixN(SubStr(Buf,1,20));
--          else
--           Buf="";
--        fi;
        Buf="";
        TextFileAppendLn(F,Buf);
        TextFileWriteLn(F,"|");
        --
        nn=Records(OAКонтр);
        for n=1..nn do
         --Реквизиты контрагента
         if ТипДок=0:
            TextFileAppendLn(F,"BNCONTR|");
           |ТипДок=1:
            TextFileAppendLn(F,"BCCONTR|");
           |ТипДок=2:
            TextFileAppendLn(F,"BSCONTR|");
         fi;
         --Наименование(ФИО) контрагента
         Buf=GetFieldS(OAКонтр,n,"РЕКВП.ПОЛНИМЯ");
         Buf=fixN(SubStr(Buf,1,255));
         TextFileAppendLn(F,Buf);
         Buf=GetFieldS(OAКонтр,n,"РЕКВП.РПО_ПОЛНИМЯ2");
         Buf=fixN(SubStr(Buf,1,255));
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --ИНН
         Buf=GetFieldS(OAКонтр,n,"РЕКВП.ИНН");
         Buf=fixN(SubStr(Buf,1,12));
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --КПП
         Buf=GetFieldS(OAКонтр,n,"РЕКВП.КПП");
         Buf=fixN(SubStr(Buf,1,9));
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --Страна юр. адреса
--         if not f20130901:
--            Buf=GetFieldS(OAКонтр,n,"РЕКВП.РПО_СТРАНА");
--            Buf=fixN(SubStr(Buf,1,80));
--           else
--            Buf="";
--         fi;
         Buf="";
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --Код страны по ОКСМ
--         if not f20130901:
--            Buf=GetFieldS(OAКонтр,n,"РЕКВП.РПО_ОКСМ");
--            Buf=fixN(SubStr(Buf,1,3));
--           else
--            Buf="";
--         fi;
         Buf="";
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --Юридический адрес
--         if not f20130901:
--            Buf=GetFieldS(OAКонтр,n,"РЕКВП.ЮРАДРЕС");
--            Buf=fixN(SubStr(Buf,1,255));
--           else
--            Buf="";
--         fi;
         Buf="";
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --Телефон (факс)
--         if not f20130901:
--            Buf=GetFieldS(OAКонтр,n,"РЕКВП.ТЕЛЕФОН");
--            if Buf="":
--               Buf=GetFieldS(OAКонтр,n,"РЕКВП.ФАКС");
--            fi;
--            Buf=fixN(SubStr(Buf,1,50));
--           else
--            Buf="";
--         fi;
         Buf="";
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --Код статуса
--         if not f20130901:
--            Buf=GetFieldS(OAКонтр,n,"РЕКВП.РПО_СТАТУС");
--            Buf=fixN(SubStr(Buf,1,1));
--           else
--            Buf="";
--         fi;
         Buf="";
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --Номер банковского счета
--         БанкП_=GetFieldR(OAКонтр,n,"БАНКП");
--         if not БанкП_=nil and not f20130901:
--            Buf=GetFieldS(OAКонтр,n,"БАНКП.РСЧЕТ");
--            Buf=fixN(SubStr(Buf,1,20));
--           else
--            Buf="";
--         fi;
         Buf="";
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --Наименование банка
--         if not БанкП_=nil and not f20130901:
--            Buf=GetFieldS(OAКонтр,n,"БАНКП.БАНК")+if(fДобГородВБанк," "+GetFieldS(OAКонтр,n,"БАНКП.ГОРОД"),"");
--            Buf=fixN(SubStr(Buf,1,160));
--           else
--            Buf="";
--         fi;
         Buf="";
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --БИК банка
--         if not БанкП_=nil and not f20130901:
--            Buf=GetFieldS(OAКонтр,n,"БАНКП.БИК");
--            Buf=fixN(SubStr(Buf,1,9));
--           else
--            Buf="";
--         fi;
         Buf="";
         TextFileAppendLn(F,Buf);
         TextFileAppendLn(F,"|");
         --Корр.счет банка
--         if not БанкП_=nil and not f20130901:
--            Buf=GetFieldS(OAКонтр,n,"БАНКП.КСЧЕТ");
--            Buf=fixN(SubStr(Buf,1,20));
--           else
--            Buf="";
--         fi;
         Buf="";
         TextFileAppendLn(F,Buf);
         TextFileWriteLn(F,"|");
        od;
        if flagИсп then
           --Реквизиты исполнительного документа
           if ТипДок=0:
              TextFileAppendLn(F,"BNIDOC|");
             |ТипДок=1:
              TextFileAppendLn(F,"BCIDOC|");
             |ТипДок=2:
              TextFileAppendLn(F,"BSIDOC|");
           fi;
           --Номер
           Buf=GetFieldS(OWA,i,"ИСП_ДОКНОМ");
           Buf=fixN(SubStr(Buf,1,50));
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Дата выдачи
           Buf=DateToString(GetFieldD(OWA,i,"ИСП_ДОКДАТ"));
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Наименование судебного органа
           Buf=GetFieldS(OWA,i,"ИСП_ОРГАН");
           Buf=fixN(SubStr(Buf,1,255));
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Сумма
           Buf=Str(GetFieldN(OWA,i,"ИСП_ДОКСУМ"),2);
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Номер уведомления о поступлении исполнительного документа
           Buf=GetFieldS(OWA,i,"ИСП_УВЕДНОМ");
           Buf=fixN(SubStr(Buf,1,15));
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Дата уведомления о поступлении исполнительного документа
           Buf=DateToString(GetFieldD(OWA,i,"ИСП_УВЕДДАТ"));
           TextFileAppendLn(F,Buf);
           TextFileWriteLn(F,"|");
        fi;
        if flagДоп then
           --Дополонительный реквизиты обязательства, сформированного на основе контракта
           if ТипДок=0:
              TextFileAppendLn(F,"BNEXREQ|");
             |ТипДок=1:
              TextFileAppendLn(F,"BCEXREQ|");
             |ТипДок=2:
              TextFileAppendLn(F,"BSEXREQ|");
           fi;
           --Способ размещения заказа
--           if not f20130901:
--              Buf=GetFieldS(OWA,i,"ДОП_РАЗМЕЩЗАКАЗ");
--              Buf=fixN(SubStr(Buf,1,2));
--             else
--              Buf="";
--           fi;
           Buf="";
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Дата подведения итогов конкурса
--           if not f20130901:
--              Buf=if(GetFieldD(OWA,i,"ДОП_ДАТАИТОГ")=1.1.100,"",DateToString(GetFieldD(OWA,i,"ДОП_ДАТАИТОГ")));
--             else
--              Buf="";
--           fi;
           Buf="";
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Вид документа, подтверждающего основание заключения контракта
--           if not f20130901:
--              Buf=GetFieldS(OWA,i,"ДОП_ВИДДОКОСН");
--              Buf=fixN(SubStr(Buf,1,160));
--             else
--              Buf="";
--           fi;
           Buf="";
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Номер документа, подтверждающего основание заключения контракта
--           if not f20130901:
--              Buf=GetFieldS(OWA,i,"ДОП_НОМДОКОСН");
--              Buf=fixN(SubStr(Buf,1,254));
--             else
--              Buf="";
--           fi;
           Buf="";
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Дата документа, подтверждающего основание заключения контракта
--           if not f20130901:
--              Buf=DateToString(GetFieldD(OWA,i,"ДОП_ДАТАДОКОСН"));
--             else
--              Buf="";
--           fi;
           Buf="";
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Статус исполнения контракта
           if ТипДок=1:
--              if not f20130901:
--                 Buf=GetFieldS(OWA,i,"Доп_Статус");
--                else
--                 Buf="";
--              fi;
              Buf="";
              TextFileAppendLn(F,Buf);
              TextFileAppendLn(F,"|");
           fi;
           --Номер в реестровой записи госконтрактов
           Buf=GetFieldS(OWA,i,"ДОП_НОМ_РЕЕСТР");
           Buf=fixN(SubStr(Buf,1,19));
           TextFileAppendLn(F,Buf);
           TextFileWriteLn(F,"|");
        fi;
        nn=РасчетРаздела(OWA,i);
        if isФАИП:
           w=0;
           for n=1..nn do
            if BufКБК[n]="x":
               if ТипДок=0:
                  TextFileAppendLn(F,"BNDESCRFAIP|");
                 |ТипДок=1:
                  TextFileAppendLn(F,"BCDESCRFAIP|");
                 |ТипДок=2:
                  TextFileAppendLn(F,"BSDESCRFAIP|");
               fi;
               --Наименование объекта ФАИП
               Buf=BufФАИП_Наим1[n];
               Buf=fixN(SubStr(Buf,1,255));
               TextFileAppendLn(F,Buf);
               Buf=BufФАИП_Наим2[n] ;
               Buf=fixN(SubStr(Buf,1,255));
               TextFileAppendLn(F,Buf);
               Buf=BufФАИП_Наим3[n]  ;
               Buf=fixN(SubStr(Buf,1,255));
               TextFileAppendLn(F,Buf);
               Buf=BufФАИП_Наим4[n]   ;
               Buf=fixN(SubStr(Buf,1,255));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
               --Код объекта ФАИП
               Buf=BufФАИП_Код[n];
               Buf=fixN(SubStr(Buf,1,255));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
              else
               w=w+1;
               if ТипДок=0:
                  TextFileAppendLn(F,"BNDESCRFAIP_KBK|");
                 |ТипДок=1:
                  TextFileAppendLn(F,"BCDESCRFAIP_KBK|");
                 |ТипДок=2:
                  TextFileAppendLn(F,"BSDESCRFAIP_KBK|");
               fi;
               --Номер П/п
               Buf=Str(w);
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
               --Вид средств для исполнения обязательства
               Buf=BufИст[n];
               Buf=fixN(SubStr(Buf,1,1));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
               if ТипДок=0:
                  --Код по БК
                  Buf=BufКБК[n];
                  Buf=fixN(SubStr(Buf,1,20));
                  TextFileAppendLn(F,Buf);
                  TextFileAppendLn(F,"|");
                  --Тип КБК
                  Buf=BufТипКБК[n];
                  Buf=fixN(SubStr(Buf,1,2));
                  TextFileAppendLn(F,Buf);
                  TextFileAppendLn(F,"|");
                 else
                  --Тип КБК
                  Buf=BufТипКБК[n];
                  Buf=fixN(SubStr(Buf,1,2));
                  TextFileAppendLn(F,Buf);
                  TextFileAppendLn(F,"|");
                  --Код по БК
                  Buf=BufКБК[n];
                  Buf=fixN(SubStr(Buf,1,20));
                  TextFileAppendLn(F,Buf);
                  TextFileAppendLn(F,"|");
                  --Код цели
                  Buf=BufДопКл[n];
                  Buf=fixN(SubStr(Buf,1,20));
                  TextFileAppendLn(F,Buf);
                  TextFileAppendLn(F,"|");
               fi;
               --Предмет по документу-основанию
               Buf=BufПредм1[n];
               Buf=fixN(SubStr(Buf,1,255));
               TextFileAppendLn(F,Buf);
               Buf=BufПредм2[n] ;
               Buf=fixN(SubStr(Buf,1,255));
               TextFileAppendLn(F,Buf);
               Buf=BufПредм3[n]  ;
               Buf=fixN(SubStr(Buf,1,255));
               TextFileAppendLn(F,Buf);
               Buf=BufПредм4[n]   ;
               Buf=fixN(SubStr(Buf,1,255));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
            fi;
            --Сумма на январь
            Buf=Str(BufСумМ1[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на февраль
            Buf=Str(BufСумМ2[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на март
            Buf=Str(BufСумМ3[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на апрель
            Buf=Str(BufСумМ4[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на май
            Buf=Str(BufСумМ5[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на июнь
            Buf=Str(BufСумМ6[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на июль
            Buf=Str(BufСумМ7[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на август
            Buf=Str(BufСумМ8[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на сентябрь
            Buf=Str(BufСумМ9[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на октябрь
            Buf=Str(BufСумМ10[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на ноябрь
            Buf=Str(BufСумМ11[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на декабрь
            Buf=Str(BufСумМ12[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на текущий финансовый год
            Buf=Str(BufСум1[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на первый год
            Buf=Str(BufСум2[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на второй год
            Buf=Str(BufСум3[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на третий год
            Buf=Str(BufСум4[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на четвертый год
            Buf=Str(BufСум5[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на пятый и последующие годы
            Buf=Str(BufСум6[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            if not BufКБК[n]="x":
               --Примечание
               Buf=BufПримеч[n];
               Buf=fixN(SubStr(Buf,1,254));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
               if ТипДок=0:
                  --Код цели
                  Buf=BufДопКл[n];
                  Buf=fixN(SubStr(Buf,1,20));
                  TextFileAppendLn(F,Buf);
                  TextFileAppendLn(F,"|");
               fi;
            fi;
            TextFileWriteLn(F,"");
           od; --for nn=1.. nn do
          else
           for n=1..nn do
            --Расшифровка обязательства
            if ТипДок=0:
               TextFileAppendLn(F,"BNDESCR|");
              |ТипДок=1:
               TextFileAppendLn(F,"BCDESCR|");
              |ТипДок=2:
               TextFileAppendLn(F,"BSDESCR|");
            fi;
            --Номер П/п
            Buf=Str(n);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Вид средств для исполнения обязательства
            Buf=BufИст[n];
            Buf=fixN(SubStr(Buf,1,1));
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            if ТипДок=0 or ТипДок=2:
               --Код по БК
               Buf=BufКБК[n];
               Buf=fixN(SubStr(Buf,1,20));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
               --Тип КБК
               Buf=BufТипКБК[n];
               Buf=fixN(SubStr(Buf,1,2));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
              else
               --Тип КБК
               Buf=BufТипКБК[n];
               Buf=fixN(SubStr(Buf,1,2));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
               --Код по БК
               Buf=BufКБК[n];
               Buf=fixN(SubStr(Buf,1,20));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
               --Код цели
               Buf=BufДопКл[n];
               Buf=fixN(SubStr(Buf,1,20));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
            fi;
            --Предмет по документу-основанию
            Buf=BufПредм1[n];
            Buf=fixN(SubStr(Buf,1,255));
            TextFileAppendLn(F,Buf);
            Buf=BufПредм2[n] ;
            Buf=fixN(SubStr(Buf,1,255));
            TextFileAppendLn(F,Buf);
            Buf=BufПредм3[n]  ;
            Buf=fixN(SubStr(Buf,1,255));
            TextFileAppendLn(F,Buf);
            Buf=BufПредм4[n]   ;
            Buf=fixN(SubStr(Buf,1,255));
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на январь
            Buf=Str(BufСумМ1[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на февраль
            Buf=Str(BufСумМ2[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на март
            Buf=Str(BufСумМ3[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на апрель
            Buf=Str(BufСумМ4[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на май
            Buf=Str(BufСумМ5[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на июнь
            Buf=Str(BufСумМ6[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на июль
            Buf=Str(BufСумМ7[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на август
            Buf=Str(BufСумМ8[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на сентябрь
            Buf=Str(BufСумМ9[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на октябрь
            Buf=Str(BufСумМ10[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на ноябрь
            Buf=Str(BufСумМ11[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на декабрь
            Buf=Str(BufСумМ12[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на текущий финансовый год
            Buf=Str(BufСум1[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на первый год
            Buf=Str(BufСум2[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на второй год
            Buf=Str(BufСум3[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на третий год
            Buf=Str(BufСум4[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на четвертый год
            Buf=Str(BufСум5[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма на пятый и последующие годы
            Buf=Str(BufСум6[n],2);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Примечание
            Buf=BufПримеч[n];
            Buf=fixN(SubStr(Buf,1,254));
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            if ТипДок=0 or ТипДок=2:
               --Код цели
               Buf=BufДопКл[n];
               Buf=fixN(SubStr(Buf,1,20));
               TextFileAppendLn(F,Buf);
               TextFileAppendLn(F,"|");
            fi;
            TextFileWriteLn(F,"");
           od; --for nn=1.. nn do
        fi; --isФАИП
        Wrng[Iter]=0;
        Err[Iter]=0;
        FNam[Iter]=Folder+ИмяРейс;
        Msg[Iter]='Данные успешно выгружены в файл:'+FNam[Iter];
       Except
        Msg[Iter]="Ошибка записи в файл '"+Folder+ИмяРейс+"'";
        Err[Iter]=Err[Iter]+1;
        Raise;
       end;
      Finally
       TextFileClose(F);
      end;
      if not ГЭК[Iter]="":
         if ФорматГЭК=0:
            nn=0;
            ww=WordsCount(ГЭК[Iter],",");
            for w=1..ww do
             tmp=ExtractWord(w,ГЭК[Iter],",");
             nn=Раб.Вспом.Сканер.ЧитатьГЭК(ExtractWord(1,tmp,":"),Int(ExtractWord(2,tmp,":")),"jpg",w=1);
            od;
            if not nn=0:
               tmp=Cache+GetGUID;
               if Раб.Вспом.Сканер.JpegToPdf(tmp,False)=1: FTmpГЭК[Iter]=tmp; flagГЭК=True; fi;
            fi;
           |ФорматГЭК=1:
            flagГЭК=True;
         fi;
      fi;
      BeginChanging(OWA,False);
      Try
       nn=PutFieldD(OWA,i,"ДатаРейс",ДатаРейс);
       nn=PutFieldI(OWA,i,"НомРейс",НомРейс_);
       nn=PutFieldL(OWA,i,"ВБанк",True);
       if setДокОсн_CMF:
          tmp="";
          if not GetFieldR(OWA,i,"Договор")=nil:
             tmp=Раб.Договор.УстанCMF(SelfCrd,"РПО_ДОГОВОР",GetFieldR(OWA,i,"Договор"),True,False);
            |not GetFieldR(OWA,i,"ДО")=nil:
             tmp=Раб.Договор.УстанCMF(SelfCrd,"РПО_ДО",GetFieldR(OWA,i,"ДО"),True,False);
          fi;
          if not tmp="": Trace("Ошибка закрытия документа основания "+RecordToString(UKey[n])+" >>>"+ExtractWord(1,tmp,"|")+" "+ExtractWord(2,tmp,"|")); fi;
       fi;
       EndChanging(OWA);
      Except
       CancelChanging(OWA);
      end;
      НомРейс_=НомРейс_+1;
   fi; --if State=1 or State=3:
  od; --for Iter=1..Упр do
  if flagГЭК:
     if fПутьГЭК:
        if ПутьГЭК="":
           if ChooseFolder(FolderГЭК,"Укажите путь выгрузки графической копии")=cmCancel: 
              for Iter=1..Упр do
               Msg[Iter]=Msg[Iter]+Chr(13)+"Отказ от выгрузки графической электронной копии";
              od;
              Message("Отказ от выгрузки графической электронной копии",mtWarning); 
              Exit;
           fi;
          else
           FolderГЭК=ПутьГЭК;
        fi;
       else
        FolderГЭК=Folder;
     fi; --if fПутьГЭК:
     for Iter=1..Упр do
      if not ГЭК[Iter]="":
         Ном_=Раб.Формат.ReplaceSubStr(Ном[Iter],Chr(13),"");
         if ФорматГЭК=0:
            if ExistFile(FTmpГЭК[Iter]):
               if fПапкаГЭК:
                  tmp=FolderГЭК+if(ТипДок=0:"СведБО"|ТипДок=1:"ИзмБО"|ТипДок=2:"ПерегБО")+Ном_;
                  CreateFolder(tmp);
                  tmp=tmp+"\"+if(ТипДок=0:"СведБО"|ТипДок=1:"ИзмБО"|ТипДок=2:"ПерегБО")+Ном_+".pdf";
                 else
                  tmp=FolderГЭК+if(ТипДок=0:"СведБО"|ТипДок=1:"ИзмБО"|ТипДок=2:"ПерегБО")+Ном_+".pdf";
               fi;
               CopyFile(FTmpГЭК[Iter],tmp);
               if ExistFile(tmp):
                  FNameГЭК[Iter]=tmp;
                  Msg[Iter]=Msg[Iter]+Chr(13)+"Графическая электронная копия успешно выгружена в файл: "+FNameГЭК[Iter];
                 else
                  Msg[Iter]=Msg[Iter]+Chr(13)+"Ошибка выгрузки графической электронной копии";
               fi;
              else
               Msg[Iter]=Msg[Iter]+Chr(13)+"Ошибка выгрузки графической электронной копии";
            fi;
           |ФорматГЭК=1:
            nn=0;
            ww=WordsCount(ГЭК[Iter],",");
            for w=1..ww do
             tmp=ExtractWord(w,ГЭК[Iter],",");
             nn=Раб.Вспом.Сканер.ЧитатьГЭК(ExtractWord(1,tmp,":"),Int(ExtractWord(2,tmp,":")),"jpg",w=1);
            od;
            if not nn=0:
               if fПапкаГЭК:
                  tmp=FolderГЭК+"БО"+Ном_;
                  CreateFolder(tmp);
                  tmp=tmp+"\"+"БО"+Ном_+".";
                 else
                  tmp=FolderГЭК+"БО"+Ном_+".";
               fi;
               for n=1..nn do
                CopyFile(Раб.Вспом.Сканер.ФайлГЭК[n],tmp+"лист"+Format("%.2D",n)+".jpg");
                if ExistFile(tmp+"лист"+Format("%.2D",n)+".jpg"):
                   if n=1:
                      FNameГЭК[Iter]=tmp+"лист"+Format("%.2D",n)+".jpg";
                      Msg[Iter]=Msg[Iter]+Chr(13)+"Графическая электронная копия успешно выгружена в файл: "+FNameГЭК[Iter];
                     else
                      Msg[Iter]=Msg[Iter]+Chr(13)+"БО"+Ном_+".лист"+Format("%.2D",n)+".jpg";
                      FNameГЭК[Iter]=FNameГЭК[Iter]+";"+"БО"+Ном_+".лист"+Format("%.2D",n)+".jpg";
                   fi;
                  else
                   Msg[Iter]=Msg[Iter]+Chr(13)+"Ошибка выгрузки графической электронной копии";
                fi;
               od;
            fi;
         fi;
      fi; --if not ГЭК[Iter]="":
     od; --for Iter=iТабл..nТабл do
  fi; --if flagГЭК:
 Finally
  CloseWorkArea(OWA);
  for Iter=1..Упр do
   if not FTmpГЭК[Iter]="": 
      if ExistFile(FTmpГЭК[Iter]): DeleteFile(FTmpГЭК[Iter]); FTmpГЭК[Iter]=""; fi;
   fi;
  od;
  CloseProgress;
 end;
 Message("Выгрузка завершена"+Chr(13)+"Для просмотра сформированных фалов нажмите на поле 'Статус'");
 Template.Field="Msg"; 
 Template.Frame=1;
end;

Proc ЗаполнитьРекв (aРекв:Record);
 Рекв=aРекв;
 if Рекв=nil:
    Отправ="";
   else
    Отправ=GetCardFieldS("Контрагент",Рекв,"КорИмя");
 fi;
 Банк=nil;
 ОтправБанк="";
end;

Proc Вызвать (aТипДок:I; aRec: Record; aModal:L);
 ТипДок=aТипДок;
 Run=aRec;
 OpenBlank(SelfBln,aModal);
end;
--Процедуры и функции -------------
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 setДокОсн_CMF=False;
 if FieldName="НастрПоУмолч":
    Message("Значения по умолчанию восстановлены");
 fi;
 Return False;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 ОткрНастр(False);
 Настр(True);
 Return False;
end;

Func setДокОсн_CMF_OnEnter(FieldName: String; Iter: Integer): logical;
 setДокОсн_CMF=not setДокОсн_CMF;
 Return False;
end;

Func XXXXX_onValidate (Field:S; Iter:I; Value:S):L;
 if not Length(Value)=5: Message("Длина кода должна быть 5 символов",mtError); ^false; fi;
 ^True;
end;

Func XXXXX_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec:Record;
var tmp:S;
 Template.HideEditor(False);
 Rec=OpenCardFile("Контрагент","--Наше",nil,crdRecordOnly);
 if Rec=nil: ^Cur; fi;
 tmp=GetCardFieldS("Контрагент",Rec,"РПО_КБП");
 if not Length(tmp)=5: Message("Длина кода должна быть 5 символов",mtError); ^Cur; fi;
 XXXXX=tmp;
 if not Rec=Рекв: Очистить; fi;
 ЗаполнитьРекв(Rec);
 Return Cur;
end;

Func FlagВБанк_OnEnter(FieldName: String; Iter: Integer): logical;
 FlagВБанк=not(FlagВБанк);
 Очистить;
 Return False ;
end;

Proc ДатаРейс_OnExit(FieldName: String; Iter: Integer);
 if not ДатаРейс=1.1.100: НомРейсСлед; fi;
end;

Func ДатаРейс_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
 Template.HideEditor(False);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 ДатаРейс=tmp;
 НомРейсСлед;
 Return Cur;
end;

Func НомРейс_onEnter (Field:S; Iter:I):L;
 if ДатаРейс=1.1.100: Message("Введите дату формирования документов (рейса)",mtError); Template.Field="ДатаРейс"; ^False; fi;
 ^True;
end;

Func НомРейс_onValidate (Field:S; Iter:I; Value:I):L;
 if FlagВЛВС:
    if Value<1 or Value>288: Message("Выход за границы диапазона номеров 1..288 для выделенной ЛВС",mtError); ^False; fi;
   else
    if Value<1 or Value>1007: Message("Выход за границы диапазона номеров 1..1007",mtError); ^False; fi;
 fi;
 if НомРейсИспользуется(ДатаРейс, Value)=False: ^True; fi;
 if EnqOkCancel("Рейс с номером "+Str(Value)+" за дату "+DateToString(ДатаРейс)+" существует."+Chr(13)+"Загрузить документы данного рейса ?",mtWarning)=cmCancel: ^True; fi;
 НомРейс_=Value;
 ЗагрузитьРейс(ДатаРейс,Value);
 ^True;
end;

Func НомРейс_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var OWA,nr,n,i,on:I;
 Template.HideEditor(False);
 ClearVariable(Buf);
 OWA=OpenWorkArea(SelfCrd,"НомРейс","not ДатаРейс=1.1.100 and ДатаРейс="+DateToString(ДатаРейс));
 Try
  on=0;i=0;
  nr=Records(OWA);
  for n=1..nr do
    if on<>GetFieldI(OWA,n,"НомРейс"):
      on=GetFieldI(OWA,n,"НомРейс") ;i=i+1;
      Buf[i]="Рейс №"+Str(GetFieldI(OWA,n,"НомРейс"))+" от "+GetFieldS(OWA,n,"ДатаРейс");
      fi;
  od;
 Finally
  CloseWorkArea(OWA);
 end;
 if nr=0: Message("За "+DateToString(ДатаРейс)+" выгрузка не производилась"); ^Cur; fi;
 n=Alternate("Список рейсов",Buf,-1,1,12);
 if n=0: ^Cur; fi;
 n=Int(TrimRight(SubStr(Buf[n],7,2)));
 НомРейс_=n;
 ЗагрузитьРейс(ДатаРейс,n);
 Return Cur;
end;

Proc СледНомер_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if ДатаРейс=1.1.100: Message("Введите дату формирования документов (рейса)"); Template.Field="ДатаРейс"; Exit; fi;
 НомРейсСлед;
end;

Func FlagВЛВС_OnEnter(FieldName: String; Iter: Integer): logical;
 FlagВЛВС=not FlagВЛВС;
 Return False;
end;

Func ИмяРейс_onEnter(FieldName: String; Iter: Integer): logical;
 if FlagПравила:
    Message("Установлен флаг формирования имени рейса по правилам, ручной ввод имени не возможен!");
    ^False;
 fi;
 ^True;
end;

Func ИмяРейс_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
  ИмяРейс_=Value;
  Return True;
end;

Proc Путь_OnExit(FieldName: String; Iter: Integer);
 if ТипДок=0: ПутьBN=Путь; ПутьГЭКBN=ПутьГЭК;
   |ТипДок=1: ПутьBC=Путь; ПутьГЭКBC=ПутьГЭК;
   |ТипДок=2: ПутьBS=Путь; ПутьГЭКBS=ПутьГЭК;
 fi;
end;

Func Путь_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var i:I;
var Field:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 if Field="Путь":
    i=ChooseFolder(Путь,"Выберите путь выгрузки");
   else
    i=ChooseFolder(ПутьГЭК,"Выберите путь выгрузки");
 fi;
 Return Cur;
end;

Proc Д_OnExit(FieldName: String; Iter: Integer);
 if FieldName="ДН" and not ДН=1.1.100: if ДК<ДН and not ДК=1.1.100: ДК=ДН; Template.Field="ДК"; fi;
   |FieldName="ДК" and not ДН=1.1.100: if ДН>ДК: ДН=ДК; Template.Field="ДН"; fi;
 fi;
 Очистить;
end;

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

Func Секрет_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="0 -- Не секретно";
 Buf[2]="1 -- ДСП";
 Buf[3]="2 -- Секретно";
 Buf[4]="3 -- Совершенно секретно";
 Buf[5]="4 -- Особой важности";
 n=Alternate("Гриф секретности",Buf,-1,Секрет+1,12);
 if n=0: ^False; fi;
 n=n-1;
 Секрет=n;
 Очистить;
 if Упр<1: InsertFrame(Упр,1); fi;
 Return False;
end;

Func Отправ_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
 Rec=OpenCardFile("Контрагент","--Наше",Рекв,crdRecordOnly);
 if Rec=nil: ^False; fi;
 ЗаполнитьРекв(Rec);
 Очистить;
 Return False ;
end;

Proc Отправ_OnExit(FieldName: String; Iter: Integer);
 ЗаполнитьРекв(nil);
 Очистить;
end;

Func ОтправБанк_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if Рекв=nil then 
    Рекв=OpenCardFile("Контрагент","Наше",Рекв,crdRecordOnly); 
    if Рекв=nil: ^False; fi;
    Отправ=GetCardFieldS("Контрагент",Рекв,"КорИмя"); 
 fi;
 Rec=OpenCardFile("Банк_счета","КОНТРАГЕНТ="+RecordToString(Рекв),Банк,crdRecordOnly);
 if Rec=nil: ^False; fi;
 Банк=Rec;
 ОтправБанк=GetCardFieldS("БАНК_СЧЕТА",Банк,"РПО_ЛСЧЕТ")+" ("+GetCardFieldS("БАНК_СЧЕТА",Банк,"РПО_ОФК_ИМЯ")+")";
 Очистить;
 ^False;   
end;

Proc ОтправБанк_OnExit(FieldName: String; Iter: Integer);
 Банк=nil;ОтправБанк='';
 Очистить;
end;

Proc Загрузить_OnClick(Row: Integer; Col: Integer; Double: Logical);
var OWA,n,nr:i;
var F,flДата:S;
 if Рекв=nil: Message("Выберите учреждение-отправителя",mtError); Template.Field="Отправ"; Exit; fi;
 if Банк=nil: Message("Выберите лицевой счет",mtError); Template.Field="ОтправБанк"; Exit; fi;
 if ДК<ДН: Message("Начальная дата превышает конечную",mtError); Template.Field="ДН"; Exit; fi;
 F="Учитывать and (УчетФК or not РегНомер='') and "+if(ТипДок=0:"(ТипДок=0 or OverrideТипДок='0')"|ТипДок=1:"(ТипДок=1 or OverrideТипДок='1')"|ТипДок=2:"(ТипДок=2 or OverrideТипДок='2')");
 if FlagВБанк: F=F+" and not ВБанк"; fi;
 if ТипДок=0 or ТипДок=2: flДата="ДатаДок"; else flДата="Изм_ДатаДок"; fi;
 if ДН>1.1.100 and ДК>1.1.100: F=F+" and "+flДата+">="+DateToString(ДН)+" and "+flДата+"<="+DateToString(ДК);
   |ДН=1.1.100 and ДК>1.1.100: F=F+" and "+flДата+"<="+DateToString(ДК);
   |ДН>1.1.100 and ДК=1.1.100: F=F+" and "+flДата+">="+DateToString(ДН);
 fi;
 if Рекв<>nil: F=F+" and Рекв="+RecordToString(Рекв); fi;
 if Банк<>nil: F=F+" and Банк="+RecordToString(Банк); fi;
 F=F+" and Секрет="+Str(Секрет);
 Очистить;
 OWA=OpenWorkArea(SelfCrd,"ДАТАДОК;НОМЕР",F);
 Try
  Nr=Records(OWA);
  ShowProgress(Nr,'Загрузка');
  for n=1..Nr do
   InsertFrame(Упр,Упр+1);
   ProgressPos(n);
   ЗаполнитьСтроку(OWA,n,Упр,nil);
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 if Ukey[1]=nil:
    Message("По условию загрузки "+if(ТипДок=0,"сведений","заявок")+" не найдено",mtWarning);
   else 
    Проверить(0,False);
 fi;
 if Упр<1: InsertFrame(Упр,1); fi;
 if not ДатаРейс=1.1.100: НомРейсСлед; fi;
end;

Proc Проверить_OnClick(Row: Integer; Col: Integer; Double: Logical);
var mt:I;
 УдалитьПустыеСтроки;
 if Ukey[1]=nil:
    Message("Заполните список выгружаемых сведений",mtError);
    if Упр<1: InsertFrame(Упр,1); fi;
    Exit;
   else 
    Проверить(0,False);
 fi;
 if Упр<1: InsertFrame(Упр,1); fi;
 if not SumOfArray(Err,Упр)=0: mt=mtError;
   |not SumOfArray(Wrng,Упр)=0: mt=mtWarning;
   |True: mt=mtInformation;
 fi;
 Message("Проверка завершена"+Chr(13)+"Ошибок: "+Str(SumOfArray(Err,Упр))+Chr(13)+"Предупреждений: "+Str(SumOfArray(Wrng,Упр)),mt);
end;

Proc Очистить_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if EnqOkCancel("Список будет очищен, продолжить ?",mtWarning)=cmCancel: Exit; fi;
 Очистить;
end;

Proc ПерейтиНаОшибку_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if SumOfArray(Err)=0 then 
    if SumOfArray(Wrng)=0 then Message('Ошибок не обнаружено'); Exit; fi;
    НаПредупр;
 fi;
 НаОшибку;
end;

Func Загл8_2_OnEnter(FieldName: String; Iter: Integer): logical;
var p:I;
var bln:S;
 Bln="Документы.ЛБО.Свед_БО";
 if ModalMode and isBlankOpen(Bln): Message("Бланк документа - основания уже открыт. Для возврата закройте текущий бланк",mtWarning); ^False; fi;
 if isBlankOpen(Bln): Close(Bln); fi;
 if EnqOkCancel("Вы уверены, что хотите распечатать документов: "+Str(Упр)+" ?",mtWarning)=cmCancel: ^False; fi;
 p=0;
 ShowProgress(Упр,"Печать....");
 Try
  for Iter=1..Упр do
   ProgressPos(Iter);
   if not UKey[Iter]=nil:
      PutVariableL(bln+".inПечать",True);
      OpenBlank(bln,True,UKey[Iter]);
      ЗаполнитьСтроку (0,0,Iter,UKey[Iter]);
      Проверить(Iter,False);
      p=p+1;
   fi;
  od;
 Finally
  CloseProgress;
 end;
 Message("Распечатано документов "+Str(p)+" из "+Str(Упр));
 Return False;
end;

Func A_onEnter (Field:String; Iter:Integer):Logical;
 InsertFrame(Упр,Iter+1);
 ^false;
end;

Func D_onEnter (Field:String; Iter:Integer):Logical;
 DeleteFrame(Упр,Iter);
 if Упр<1: InsertFrame(Упр,1); fi;
 ^false;
end;

Func БО_onEnter (Field:S; Iter:I):L;
var Rec: Record;
var Filt:S;
 if Рекв=nil: Message("Выберите учреждение-отправителя",mtError); Template.Field="Отправ"; ^False; fi;
 if Банк=nil: Message("Выберите лицевой счет",mtError); Template.Field="ОтправБанк"; ^False; fi;
 Rec=UKey[Iter];
 Filt="-- Учитывать and (УчетФК or not РегНомер='') and "+if(ТипДок=0:"(ТипДок=0 or OverrideТипДок='0')"|ТипДок=1:"(ТипДок=1 or OverrideТипДок='1')"|ТипДок=2:"(ТипДок=2 or OverrideТипДок='2')");
 if Рекв<>nil then Filt=Filt+" and РЕКВ="+RecordToString(Рекв);  fi;
 if Банк<>nil then Filt=Filt+" and БАНК="+RecordToString(Банк); fi;
 Filt=Filt+" and Секрет="+Str(Секрет);
 Rec=OpenCardFile(SelfBro,Filt,Rec);
 if not Rec=nil: 
    ЗаполнитьСтроку (0,0,Iter,Rec);
    Проверить(Iter,False);
 fi;
 ^False;
end;

Proc Field_onExit(FieldName: String; Iter: Integer);
 Ном[Iter]="";
 Дат[Iter]=1.1.100;
 Сум[Iter]=0;
 Контр[Iter]="";
 ГЭК_[Iter]="";
 Msg[Iter]="";
 Wrng[Iter]=0;
 Err[Iter]=0;
 UKey[Iter]=nil;
 Fnam[Iter]="";
 ГЭК[Iter]="";
 FTmpГЭК[Iter]="";        
 FNameГЭК[Iter]="";
end;


Func ГЭК_OnEnter(FieldName: String; Iter: Integer): logical;
var w,ww,OWA:i;
var tmp:S;
 if not fГЭК: Message("Выгрузка графической электронной копии запрещена",mtWarning); Template.Object="cbГЭК"; ^False; fi;
 OWA=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(UKey[Iter]));
 Try
  if Records(OWA)=0: Message("Документ не найден",mtError); ^False; fi;
  РасчетГЭК(OWA,1,Iter);
 Finally
  CloseWorkArea(OWA);
 end;
 ClearVariable(Buf);
 if ГЭК_[Iter]="":
    Message("Документ не был отсканирован");
   else
    ww=WordsCount(ГЭК_[Iter],Chr(13));
    for w=1..ww do
     Buf[w]=Trim(ExtractWord(w,ГЭК_[Iter],Chr(13)));
    od;
    if ww=1: w=1; else w=Alternate("Выберите документ",Buf,-1,1,12); fi;
    if not w=0:
       tmp=ExtractWord(w,ГЭК[Iter],",");
       Раб.Вспом.Сканер.Вызвать(ExtractWord(1,Buf[w],":"),ExtractWord(1,tmp,":"),Int(ExtractWord(2,tmp,":")),"jpg",True,True);
    fi;
 fi;
 Return False;
end;

Func Msg_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if Match(Msg[Iter],"Данные успешно выгружены в файл:*"): ExecuteProgram("NotePad '"+FNam[Iter]+"'"); ^Cur; fi;
 if not UKey[Iter]=nil:
    OpenBlank("Документы.ЛБО.СВЕД_БО",True,UKey[Iter]);
    ЗаполнитьСтроку (0,0,Iter,UKey[Iter]);
    Проверить(Iter,False);
 fi;
 Return Cur;
end;

Func Txt8_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
var Bln:S;
 Bln="Документы.ЛБО.Свед_БО";
 if ModalMode and isBlankOpen(Bln): Message("Бланк документа - основания уже открыт. Для возврата закройте текущий бланк",mtWarning); ^Cur; fi;
 if isBlankOpen(Bln): Close(Bln); fi;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if not UKey[Iter]=nil:
    if AsString(Template.Field)="Txt8_2":
       PutVariableL(bln+".inПечать",True);
    fi;
    OpenBlank(bln,True,UKey[Iter]);
    ЗаполнитьСтроку (0,0,Iter,UKey[Iter]);
    Проверить(Iter,False);
 fi;
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРейс_onClick (Obj:S);
 if not Проверить(0,True): Exit; fi;
 if not SumOfArray(Err,Упр)=0: Message("В результате проверки обнаружено ошибок: "+Str(SumOfArray(Err,Упр))+Chr(13)+"Формирование рейса отменено",mtError); НаОшибку; Exit; fi;
 if not SumOfArray(Wrng,Упр)=0:
    if EnqOkCancel("В результате проверки обнаружено предупреждений :"+Str(SumOfArray(Wrng,Упр))+" Игнорировать предупреждения ?",mtWarning)=cmCancel: НаПредупр; Exit; fi;
 fi;
 if Путь='' then if ChooseFolder(Folder,"Сохранить как")=cmCancel: Message("Отказ от формирования рейса"); Exit; fi;
   else
    Folder=Путь;
 fi;
 ВыгрузитьРейс;
end;

Proc BtnСЭД_OnClick(Sender: String);
var tmp:S;
var hПуть:S;
 Try
  hПуть=Путь;
  tmp=Раб.вспом.СЭД.ПолучитьПапку("BN","exp");
   if (tmp="") or (Not(ExistsFolder(tmp))) then
    if (tmp="") then 
      Message("Отказ от формирования рейса, каталог не задан");
     else 
      Message("Отказ от формирования рейса, каталог не найден");
    fi;
    exit;
   else 
    Путь=tmp;
    btnРейс_onClick(Sender);
  fi;
 Finally
  Путь=hПуть;
 end;
end;

Proc btnОпись_OnClick(Sender: String);
var Iter,n:I;
var bln:S;
 bln="ДОКУМЕНТЫ.ЛБО.ОПИСЬ_ВЫГРУЗКИ_БО";
 ExecuteProc(bln+".ОчиститьBuf");
 PutVariableS(bln+".Режим",if(ТипДок=0:"BN"|ТипДок=1:"BC"|True:""));
 PutVariableD(bln+".ДатаОпись",ДатаРейс);
 for Iter=1..Упр do
  if not UKey[Iter]=nil:
     n=n+1;
     PutVariableR(bln+".BufДок["+Str(n)+"]",UKey[Iter]);
  fi;
 od;
 PutVariableS(bln+".GUID",GetGUID);
 OpenBlank(bln,True);
end;

Proc btnНастр_OnClick(Sender: String);
 Настр(False);
 ОткрНастр(True);
end;

Proc cbГЭК_OnChange(Sender: String);
 Настр(True);
 if fГЭК:
    Проверить(0,False);
   else
    ClearVariable(ГЭК);
    ClearVariable(ГЭК_);
 fi;
 cbГЭК.State=fГЭК;
end;

Proc OnChange(Sender: String);
 Настр(True);
end;
--Обработчики событий объектов шаблона-----
--
--Обработчики событий шаблона -----
Proc onOpen(Create:L);
var Rec: Record;
 ОткрНастр(False);
 Настр(False);
 Раб.CRC16.Init;
 if Упр<1: InsertFrame(Упр,1); fi;
 if ДатаРейс=1.1.100: ДатаРейс=ToDay; fi;
 НомРейсСлед;
 if XXXXX="":
    Rec=Раб.Бюджет2005.НашРекв;
    if not Rec=nil: 
       XXXXX=GetCardFieldS("Контрагент",Rec,"РПО_КБП"); 
       if not Length(XXXXX)=5: XXXXX=""; fi;
       ЗаполнитьРекв(Rec);
    fi;
 fi;
 Инициализация;
 if not hТипДок=ТипДок:
    hТипДок=ТипДок;
    Очистить;
 fi;
 if ТипДок=0: Путь=ПутьBN; ПутьГЭК=ПутьГЭКBN;
   |ТипДок=1: Путь=ПутьBC; ПутьГЭК=ПутьГЭКBC;
   |ТипДок=2: Путь=ПутьBS; ПутьГЭК=ПутьГЭКBS;
 fi;
 if not Run=nil:
    Rec=Run; Run=nil;
    Очистить;
    НомРейсСлед;
    InsertFrame(Упр,Упр+1);
    ЗаполнитьСтроку (0,0,Упр,Rec);
    Проверить(Упр,False);
 fi;
end;
--Обработчики событий шаблона -----
--


Конец