-- Шаблон создан мастером бланков
-- 17.02.2007 13:19:07
--
БланкСШаблоном "Выгрузка заявки на возврат (формат TXZV140101)";

var Упр:I;

cbГЭК        : Object;
cbПутьГЭК    : Object;
cbПапкаГЭК   : Object;
cbxФорматГЭК : Object;

fВЛВС:L=[False];
var fПравила: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(fВЛВС,Раб.Бюджет2005.Format36(1007+НомРейс_),Раб.Бюджет2005.Format36(НомРейс_));
ИмяРейс_:S;
var ИмяРейс:S=if(fПравила,XXXXX+DD+НомРейс+".ZV"+M,ИмяРейс_);
Путь:S;
ПутьГЭК:S;

Учр:Record;
УчрНаим:S;
var ДН:D=[ToDay];
var ДК:D=[ToDay];
ИсклВыгруж:L=[True];
Секрет:I;
flagОтдРейс:L;

var fГЭК:L;
var fПутьГЭК:L;
var fПапкаГЭК:L;
var ФорматГЭК:I;
var fГЭК_ЗВЗ:L=True;

var ВзятьИзЗВЗ_Учр:S="Заполнить из заявки";

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

var пп[]:i=$;
var НомДок[]:S;
var НомДок_:S="";
var ДатаДок[]:D;
var Контр[]:S;
var НомРеестр[]:S;
var СумДок[]:N;
var ГЭК_[]:S;
var Msg[]:S;
var Msg_:S="";
var Err[]:I;
var Wrn[]:I;
var Cmt[]:I;
var Key[]:Record;
var FTmp[]:S;
var FName[]:S;
var ГЭК[]:S;
var FTmpГЭК[]:S;
var FNameГЭК[]:S;

var ВсегоСумДок:N=SumOfArray(СумДок,Упр);

Folder:S;
FolderГЭК:S;

var Buf[]:S;

var BufE[]:S;
var BufW[]:S;
var BufC[]:S;

var accept:S;

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

var SelfCrd:S='РПО_ЗАЯВКА_ВОЗВРАТ';
var SelfBln:S="ДОКУМЕНТЫ.БАНК.ЗАЯВКА_ВОЗВРАТ_ВЫГРУЗКА_FK_TXZV140101";

var fДобГородВБанк:L;
var fКлиентКорИмя:L;

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

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

Proc Оформление;
 cbПутьГЭК.Enabled=fГЭК;
 cbПапкаГЭК.Enabled=fГЭК;
 cbxФорматГЭК.Enabled=fГЭК;
-- cbГЭК_ЗВЗ.Enabled=fГЭК;
end;

Func Fix (Value:S):S;
  if not Pos("|",Value)=0:
     Value=Раб.Формат.ReplaceSubStr(Value,"|"," ");
  fi;
 ^Trim(Value);
end;

Proc Очистить (Iter:I);
 if Iter=0:
    ClearVariable(Упр);
    ClearVariable(НомДок);
    ClearVariable(ДатаДок);
    ClearVariable(Контр);
    ClearVariable(СумДок);
    ClearVariable(ГЭК_);
    ClearVariable(НомРеестр);
    ClearVariable(Msg);
    ClearVariable(Err);
    ClearVariable(Wrn);
    ClearVariable(Cmt);
    ClearVariable(Key);
    ClearVariable(FTmp);
    ClearVariable(FName);
    ClearVariable(ГЭК);
    ClearVariable(FTmpГЭК);
    ClearVariable(FNameГЭК);
   else
    НомДок[Iter]="";
    ДатаДок[Iter]=1.1.100;
    Контр[Iter]="";
    СумДок[Iter]=0;
    ГЭК_[Iter]="";
    НомРеестр[Iter]="";
    Msg[Iter]="";
    Err[Iter]=0;
    Wrn[Iter]=0;
    Cmt[Iter]=0;
    Key[Iter]=nil;
    FTmp[Iter]="";
    FName[Iter]="";
    ГЭК[Iter]="";
    FTmpГЭК[Iter]="";
    FNameГЭК[Iter]="";
 fi;
end;

Func ПолучитьФильтр(Iter:I; Rec:Record):S;
var F,tmp:S;
 F="УЧИТЫВАТЬ and ver>=12 and РЕКВ="+RecordToString(Учр);--+" and Секрет="+Str(Секрет);
 if Iter=0:
    if ИсклВыгруж: F=Раб.Бюджет2005.Объединить(F,"ДатаРейс=1.1.100 and НомРейс=0"," and "); fi;
    if ДН>1.1.100 and ДК>1.1.100: tmp="ДатаДок>="+DateToString(ДН)+" and ДатаДок<="+DateToString(ДК);
      |ДН=1.1.100 and ДК>1.1.100: tmp="ДатаДок<="+DateToString(ДК);
      |ДН>1.1.100 and ДК=1.1.100: tmp="ДатаДок>="+DateToString(ДН);
    fi;
    F=Раб.Бюджет2005.Объединить(F,tmp," and ");
   else
    tmp=if(Rec=nil,"","UKey="+RecordToString(Rec));
    F=Раб.Бюджет2005.Объединить(F,tmp," and ");
 fi;
 ^F;
end;

Proc РасчетГЭК(OWA:i; n:i; Iter:I);
var Rec: Record;
var Crd:S;
var i:i;
 ГЭК_[Iter]="";
 ГЭК[Iter]="";
 if not fГЭК: Exit; fi;
 if fГЭК_ЗВЗ:
    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;
 fi;
end;


Proc ЗагрузитьДок (Iter:I; F:S);
var OWA,n,nr:I;
var i:i;
 Очистить(Iter);
 OWA=OpenWorkArea(SelfCrd,"ДатаДок",F);
 Try
  nr=Records(OWA);
  ShowProgress(nr,"Загрузка...");
  for n=1..nr do
   ProgressPos(n);
   if Iter=0: 
      i=InsertFrame(Упр,n)-1;
     else 
      i=Iter; 
   fi;
   НомДок[i]=GetFieldS(OWA,n,"НОМЕРДОК");
   ДатаДок[i]=GetFieldD(OWA,n,"ДАТАДОК");
   Контр[i]=GetFieldS(OWA,n,"РеквП.КОРИМЯ");
   СумДок[i]=GetFieldN(OWA,n,"Док_Сум");
   Key[i]=GetRecordKey(OWA,n);
   РасчетГЭК(OWA,n,i);
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
end;

Func ПроверитьУникальность(Rec:Record; Iter:I):L;
var z:i;
 z=SearchInArray(Key,Rec,False,1);
 if not z=-1:
    if z=Iter: z=SearchInArray(Key,Rec,False,z+1); fi;
    if not z=-1: Message("Повторный ввод заявки",mtError); ^False; fi;
 fi;
 ^True;
end;

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

Proc НаОшибку (Flag:L);
var i:I;
 for  i= 1 to Упр do
  if (Flag and Err[i]>0) or (not Flag and Wrn[i]>0): Template.Field='Msg'; Template.Frame=i; Exit; fi;
 od;
end;

Proc ДобавитьСообщение (Iter:I; aСообщ:S; aОбязат:I);
 if aОбязат=1:
    Err[Iter]=Err[Iter]+1;
    BufE[Err[Iter]]=BufE[Err[Iter]]+Chr(13)+aСообщ;
   |aОбязат=0:
    Wrn[Iter]=Wrn[Iter]+1;
    BufW[Wrn[Iter]]=BufW[Wrn[Iter]]+Chr(13)+aСообщ;
   |aОбязат=-1:
    Cmt[Iter]=Cmt[Iter]+1;
    BufC[Cmt[Iter]]=BufC[Cmt[Iter]]+Chr(13)+aСообщ;
 fi;
end;

Proc ПроверкаНаСтандарт (Iter:i; aИмя:S; aЗнач:S; aОбязат:I; aДлина:I); --aИмя имя поля, aЗнач значение поля, aОбязат =1 обзательное, =0 предупреждение, =-1 необазтельное, aДлина >0 равно, <0 меньше или равно, 0 не имеет значения
var l,ll:I;
 aЗнач=Fix(aЗнач);
 if aЗнач="" and not aОбязат=-1 then
    ДобавитьСообщение (Iter,"Поле '"+aИмя+"' не заполнено",aОбязат);
    Exit;
 fi;
 ll=Length(aЗнач);
 for l=1..ll do
  if not(Pos(SubStr(aЗнач,l,1),accept)>0):
     ДобавитьСообщение(Iter,"Поле '"+aИмя+"' содержит недопустимый символ ( "+SubStr(aЗнач,l,1)+" ) на позиции "+Str(l),1);
  fi;
 od;
 if not aДлина=0 and not aЗнач="":
    if Length(aЗнач)>Abs(aДлина) then ДобавитьСообщение(Iter,"Значение поля '"+aИмя+"' превышает максимальную длину "+Str(Abs(aДлина)),1);
      |aДлина>0 and Length(aЗнач)<aДлина then ДобавитьСообщение(Iter,"Значение поля '"+aИмя+"' меньше обязательной длины "+Str(aДлина),1);
    fi;
 fi;
end;

Func Проверить(Iter:I; Full:L):L;
var OWA,z1,z2,i,mt:i;
var fMsg:L;
var fОсн, fВозвр:L;
var isBUAU:L;
 Настр(False);
 if Iter=0: УдалитьПустыеСтроки; fMsg=True; fi;
 if Full:
    if ДатаРейс=1.1.100: Message("Введите дату формирования документов (рейса)",mtError); Template.Field="ДатаРейс"; ^False; fi;
    if НомРейс_=0: Message("Введите порядковый номер рейса",mtError);  Template.Field="НомРейс_"; ^False; fi;
    if fВЛВС:
       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 fПравила:
       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;
    if Учр=nil or УчрНаим="": Message("Выберите плательщика",mtError); Template.Field="УчрНаим"; ^False; fi;
    if Key[1]=nil: Message("Заполните список выгружаемых заявок",mtError); ^False; fi;
 fi;
 if Iter>0: z1=Iter; z2=Iter; Msg[Iter]=""; Wrn[Iter]=0; Err[Iter]=0;
   |True: z1=1; z2=Упр;  ClearVariable(Msg); ClearVariable(Wrn); ClearVariable(Err);
 fi;
 OWA=OpenWorkArea(SelfCrd,"","1=0");
 if z2-z1>0: ShowProgress(z2-z1,"Проверка...."); fi;
 Try
  for Iter=z1..z2 do
   ProgressPos(Iter);
   ClearVariable(BufE);
   ClearVariable(BufW);
   ClearVariable(BufC);
   SetFilter(OWA,"UKey="+RecordToString(Key[Iter]));
   if Records(OWA)=0:
      ДобавитьСообщение(Iter,"Заявка не найдена",1);
     else
      --Проверка регистрации
      if GetFieldL(OWA,1,"УЧИТЫВАТЬ")=False:
         ДобавитьСообщение(Iter,"Заявка не принята к учету",1);
      fi;
      --Проверка выгрузки
      if not GetFieldI(OWA,1,"НОМРЕЙС")=0 and not GetFieldD(OWA,1,"ДАТАРЕЙС")=1.1.100:
         ДобавитьСообщение(Iter,"Заявка уже выгружалась рейсом №"+Str(GetFieldI(OWA,1,"НОМРЕЙС"))+" от "+DateToString(GetFieldD(OWA,1,"ДАТАРЕЙС")),-1);
      fi;
      --FROM Почтовая информация об отправителе файла
      isBUAU=False;
      if GetFieldR(OWA,1,"Рекв")=nil:
         ДобавитьСообщение(Iter,"Не выбран плательщик",1);
        else
         isBUAU=GetFieldS(OWA,1,"Рекв.РПО_ТипУчр")="АУ" or GetFieldS(OWA,1,"Рекв.РПО_ТипУчр")="БУ";
         ПроверкаНаСтандарт(Iter,"УБП(КБП) плательщика",GetFieldS(OWA,1,"Рекв.РПО_КБП"),1,5);--
         ПроверкаНаСтандарт(Iter,"Полное наименование УБП(плательщика)",GetFieldS(OWA,1,"Рекв.ПолнИмя"),1,-255);--
         ПроверкаНаСтандарт(Iter,"Полное наименование УБП(плательщика)",GetFieldS(OWA,1,"Рекв.РПО_ПолнИмя2"),-1,-255);--
         if fКлиентКорИмя:
            ПроверкаНаСтандарт(Iter,"Краткое наименование УБП(плательщика)",GetFieldS(OWA,1,"Рекв.КорИмя"),1,-255);--
         fi;
         ПроверкаНаСтандарт(Iter,"ИНН плательщика",GetFieldS(OWA,1,"Рекв.ИНН"),1,10);--
         ПроверкаНаСтандарт(Iter,"КПП плательщика",GetFieldS(OWA,1,"Рекв.КПП"),1,9);--
      fi; --if GetFieldR(OWA,1,"Учр")=nil:
      if GetFieldR(OWA,1,"Банк")=nil:
         ДобавитьСообщение(Iter,"Не выбран банковский реквизит плательщика",1);
        else
         ПроверкаНаСтандарт(Iter,"Уровень бюджета",GetFieldS(OWA,1,"БАНК.РПО_КОДБЮДЖ"),1,1);--
         ПроверкаНаСтандарт(Iter,"Код ТОФК плательщика",GetFieldS(OWA,1,"БАНК.РПО_ОФК_КОД"),1,4);--
         ПроверкаНаСтандарт(Iter,"Наименование ТОФК плательщика",GetFieldS(OWA,1,"БАНК.РПО_ОФК_ИМЯ"),1,-255);--
         ПроверкаНаСтандарт(Iter,"Наименование ТОФК плательщика",GetFieldS(OWA,1,"БАНК.РПО_ОФК_ИМЯ2"),-1,-255);--
         ПроверкаНаСтандарт(Iter,"Номер лицевого счета плательщика",GetFieldS(OWA,1,"Банк.РПО_ЛСчет"),1,11);--
         if isBUAU:
            if not (GetFieldS(OWA,1,"Банк.РПО_НАИМБЮДЖ")="" and GetFieldS(OWA,1,"Банк.РПО_НАИМБЮДЖ2")=""): ДобавитьСообщение (Iter,"Поле 'Наименование бюджета' для бюджетного/автономного учреждения не заполняется",1); fi; --
            if not (GetFieldS(OWA,1,"Банк.РПО_ФО_НАИМ1")="" and GetFieldS(OWA,1,"Банк.РПО_ФО_НАИМ2")=""): ДобавитьСообщение (Iter,"Поле 'Наименование финансового органа' для бюджетного/автономного учреждения не заполняется",1); fi; --
           else
            ПроверкаНаСтандарт(Iter,"Наименование бюджета",GetFieldS(OWA,1,"Банк.РПО_НАИМБЮДЖ"),1,-255);--
            ПроверкаНаСтандарт(Iter,"Наименование бюджета",GetFieldS(OWA,1,"Банк.РПО_НАИМБЮДЖ2"),-1,-255);--
            ПроверкаНаСтандарт(Iter,"Наименование финансового органа",GetFieldS(OWA,1,"Банк.РПО_ФО_НАИМ1"),1,-255);--
            ПроверкаНаСтандарт(Iter,"Наименование финансового органа",GetFieldS(OWA,1,"Банк.РПО_ФО_НАИМ2"),-1,-255);--
            ПроверкаНаСтандарт(Iter,"ОКПО финансового органа",GetFieldS(OWA,1,"Банк.РПО_ФО_ОКПО"),1,8);--
         fi;
      fi; --if GetFieldR(OWA,1,"Учр_Банк")=nil:
      if GetFieldD(OWA,1,"ДатаДок")=1.1.100 then
         ДобавитьСообщение (Iter,"Поле 'Дата заявки' не заполнено",1);--
      fi;
      ПроверкаНаСтандарт(Iter,"Номер заявки",GetFieldS(OWA,1,"НомерДок"),1,-15);--
      if isBUAU:
         if not GetFieldS(OWA,1,"Глава")="": ДобавитьСообщение (Iter,"Поле 'Глава по БК' для бюджетного/автономного учреждения не заполняется",1); fi; --
        else
         ПроверкаНаСтандарт(Iter,"Глава по БК",GetFieldS(OWA,1,"Глава"),if(fВЛВС,0,1),3);--
      fi;
      ПроверкаНаСтандарт(Iter,"Наименование ГРБС",GetFieldS(OWA,1,"ГРБС"),if(fВЛВС,0,1),-2000);--
      ПроверкаНаСтандарт(Iter,"Должность руководителя",GetFieldS(OWA,1,"ДолжнРук"),-1,-100);
      ПроверкаНаСтандарт(Iter,"ФИО руководителя",GetFieldS(OWA,1,"ФИОРук"),1,-50);
      ПроверкаНаСтандарт(Iter,"Должность главного бухгалтера",GetFieldS(OWA,1,"ДолжнБух"),-1,-100);
      ПроверкаНаСтандарт(Iter,"ФИО главного бухгалтера",GetFieldS(OWA,1,"ФИОБух"),-1,-50);
      --Дата подписания заявки
      if GetFieldD(OWA,1,"ДатаПодписи")=1.1.100 then
         ДобавитьСообщение (Iter,"Поле 'Дата подписания заявки' не заполнено",1);
      fi;
      ПроверкаНаСтандарт(Iter,"Источник средств",GetFieldS(OWA,1,"ДОК_ИСТ"),1,1);
      ПроверкаНаСтандарт(Iter,"Тип КБК",GetFieldS(OWA,1,"ДОК_ТИПКБК"),if(GetFieldS(OWA,1,"ДОК_ИСТ")='5',-1,0),2);
      ПроверкаНаСтандарт(Iter,"Код по КБК",GetFieldS(OWA,1,"ДОК_КБК"),if(GetFieldS(OWA,1,"ДОК_ИСТ")='5',-1,0),20);
      ПроверкаНаСтандарт(Iter,"Код субсидии(субвенции)",GetFieldS(OWA,1,"Док_ДопКл"),-1,-20);
--      ПроверкаНаСтандарт(Iter,"Код ОКАТО",GetFieldS(OWA,1,"Док_ОКАТО"),-1,11);
      ПроверкаНаСтандарт(Iter,"Код ОКТМО",GetFieldS(OWA,1,"Док_ОКТМО"),-1,-11);
      if GetFieldN(OWA,1,"Док_Сум")=0 then
         ДобавитьСообщение (Iter,"Поле 'Сумма документа в валюте' не заполнено",1);--
      fi;
      ПроверкаНаСтандарт(Iter,"Код валюты по ОКВ",GetFieldS(OWA,1,"Док_ОКВ"),1,3);--
      if GetFieldN(OWA,1,"Док_СумРуб")=0 and not GetFieldS(OWA,1,"Док_ОКВ")="643" then
         ДобавитьСообщение (Iter,"Поле 'Сумма документа в рублях' не заполнено",1);--
      fi;
      ПроверкаНаСтандарт(Iter,"Очередность платежа",GetFieldS(OWA,1,"ДОК_ОЧРПЛ"),1,1);--
--      ПроверкаНаСтандарт(Iter,"Вид платежа",GetFieldS(OWA,1,"ДОК_ВИДПЛ"),1,1);--
      if not (GetFieldS(OWA,1,"Док_ВидПл")="0" or GetFieldS(OWA,1,"Док_ВидПл")="4"):
         ДобавитьСообщение (Iter,"Допустимые значиения вида платежа: 'пусто'(0) и 'срочно'(4)",1);--
      fi;

      ПроверкаНаСтандарт(Iter,"Назначение платежа",GetFieldS(OWA,1,"Док_НазнПл"),1,-210);--

      fОсн=not (GetFieldS(OWA,1,"Осн_ДокВид")='' and GetFieldS(OWA,1,"Осн_ДокНом")='' and GetFieldD(OWA,1,"Осн_ДокДат")=1.1.100);
      ПроверкаНаСтандарт(Iter,"Вид документа-основания",GetFieldS(OWA,1,"Осн_ДокВид"),if(fОсн,1,-1),-160);
      ПроверкаНаСтандарт(Iter,"Номер документа-основания",GetFieldS(OWA,1,"Осн_ДокНом"),if(fОсн,1,-1),-15);
      if GetFieldD(OWA,1,"Осн_ДокДат")=1.1.100 and fОсн then
         ДобавитьСообщение (Iter,"Поле 'Дата документа-основания' не заполнено",1);
      fi;
      fВозвр=not(GetFieldS(OWA,1,"Возврат_ДокНом")='' and GetFieldS(OWA,1,"Возврат_ИНН")='' and GetFieldS(OWA,1,"ВОЗВРАТ_КПП")='' and GetFieldD(OWA,1,"ВОЗВРАТ_ДОКДАТ")=1.1.100 and GetFieldN(OWA,1,"ВОЗВРАТ_ДОКСУМ")=0);
      ПроверкаНаСтандарт(Iter,"Номер возвращаемого документа",GetFieldS(OWA,1,"ВОЗВРАТ_ДОКНОМ"),if(fВозвр,1,-1),-3);
      if GetFieldD(OWA,1,"ВОЗВРАТ_ДОКДАТ")=1.1.100 and fВозвр then
         ДобавитьСообщение (Iter,"Поле 'Дата возвращаемого документа' не заполнено",1);
      fi;
      if GetFieldN(OWA,1,"ВОЗВРАТ_ДОКСУМ")=0 and fВозвр then
         ДобавитьСообщение (Iter,"Поле 'Сумма возвращаемого документа' не заполнено",1);
      fi;
      ПроверкаНаСтандарт(Iter,"ИНН плательщика по возвращаемому документу",GetFieldS(OWA,1,"ВОЗВРАТ_ИНН"),if(fВозвр,1,-1),-12);
      ПроверкаНаСтандарт(Iter,"КПП плательщика по возвращаемому документу",GetFieldS(OWA,1,"ВОЗВРАТ_КПП"),if(fВозвр,1,-1),-9);
      if GetFieldR(OWA,1,"РеквП")=nil:
         ДобавитьСообщение(Iter,"Не выбран получатель",1);
        else
         ПроверкаНаСтандарт(Iter,"ИНН получателя",GetFieldS(OWA,1,"РеквП.ИНН"),0,-12);
         ПроверкаНаСтандарт(Iter,"КПП получателя",GetFieldS(OWA,1,"РеквП.КПП"),0,-9);
      fi; --if GetFieldR(OWA,1,"Учр")=nil:
      if GetFieldS(OWA,1,"БанкП.РПО_ЛСЧЕТ")="":
         ПроверкаНаСтандарт(Iter,"Код КБК получателя",GetFieldS(OWA,1,"КБК_П"),-1,20);
        else
         ПроверкаНаСтандарт(Iter,"Код КБК получателя",GetFieldS(OWA,1,"КБК_П"),1,20);
      fi;
      ПроверкаНаСтандарт(Iter,"Код ОКТМО получателя",GetFieldS(OWA,1,"ОКТМО_П"),-1,-11);--
      if GetFieldR(OWA,1,"БанкП")=nil:
         ДобавитьСообщение(Iter,"Не выбран банковский реквизит получателя",1);
        else
         ПроверкаНаСтандарт(Iter,"Наименование получателя для банка",GetFieldS(OWA,1,"БанкП.БанкИмя"),1,-160);--
         ПроверкаНаСтандарт(Iter,"Лицевой счет получателя",GetFieldS(OWA,1,"БанкП.РПО_ЛСЧЕТ"),-1,11);--
         ПроверкаНаСтандарт(Iter,"Банковский(расчетный) счет получателя",GetFieldS(OWA,1,"БанкП.РСЧЕТ"),0,20);--
         ПроверкаНаСтандарт(Iter,"Наименование банка получателя",GetFieldS(OWA,1,"БанкП.БАНК")+if(fДобГородВБанк,' '+GetFieldS(OWA,1,"БанкП.ГОРОД"),""),1,-160);--
         ПроверкаНаСтандарт(Iter,"БИК банка получателя",GetFieldS(OWA,1,"БанкП.БИК"),if(GetFieldS(OWA,1,"Док_ОКВ")='643',1,-1),9);
         ПроверкаНаСтандарт(Iter,"Корсчет банка получателя",GetFieldS(OWA,1,"БанкП.КСЧЕТ"),-1,20);
      fi; --if GetFieldR(OWA,1,"Учр_Банк")=nil:
      РасчетГЭК(OWA,1,Iter);
   fi; --if Records(OWA)>0:
   if Err[Iter]=0 and Wrn[Iter]=0:
      Msg[Iter]="Проверка пройдена.";
     else
      if not Err[Iter]=0:
         Msg[Iter]="Ошибка !";
         for i=1..Err[Iter] do
          Msg[Iter]=Msg[Iter]+BufE[i];
         od;
      fi;
      if not Wrn[Iter]=0:
         Msg[Iter]=Раб.Бюджет2005.Объединить(Msg[Iter],"Предупреждение !",Chr(13));
         for i=1..Wrn[Iter] do
          Msg[Iter]=Msg[Iter]+BufW[i];
         od;
      fi;
   fi; --if Err[Iter]=0 and Wrn[Iter]=0:
   if not Cmt[Iter]=0:
      Msg[Iter]=Раб.Бюджет2005.Объединить(Msg[Iter],"Внимание !",Chr(13));
      for i=1..Cmt[Iter] do
       Msg[Iter]=Msg[Iter]+BufC[i];
      od;
   fi;
   if Length(Msg[Iter])>252: Msg[Iter]=SubStr(Msg[Iter],1,252)+"..."; fi;
  od; --for Iter=z1..z2 do
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 if fMsg and not Full:
    if not SumOfArray(Err,Упр)=0: mt=mtError; НаОшибку(True);
      |not SumOfArray(Wrn,Упр)=0: mt=mtWarning; НаОшибку(False);
      |True: mt=mtInformation;
    fi;
    Message("Проверка завершена"+Chr(13)+"Ошибок: "+Str(SumOfArray(Err,Упр))+Chr(13)+"Предупреждений: "+Str(SumOfArray(Wrn,Упр)),mt);
 fi;
 ^True;
end;

Proc НомРейсСлед;
var OWA,nr:I;
 if ДатаРейс=1.1.100: Message("Введите дату формирования документов (файла)",mtError); Template.Field="ДатаРейс"; Exit; fi;
 OWA=OpenWorkArea(SelfCrd,"НомРейс","ДатаРейс>="+DateToString(ДатаРейс)+" and ДатаРейс<="+DateToString(ДатаРейс)+" and "+if(fВЛВС,"ВЛВС","not ВЛВС"));
 Try
  Nr=Records(OWA);
  if Nr=0: 
     НомРейс_=1;
    else
     НомРейс_=Abs(GetFieldI(OWA,Nr,"НомРейс"))+1;
     if fВЛВС:
        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(ДР)+" and "+if(fВЛВС,"ВЛВС","not ВЛВС"));
 Try
  if Records(OWA)=0: ^False; else ^True; fi;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Proc ЗагрузитьРейс (ДР:D; НР:I);
 ЗагрузитьДок (0,"НомРейс="+Str(НР)+" and ДатаРейс>="+DateToString(ДР)+" and ДатаРейс<="+DateToString(ДР));
 if not Key[1]=nil:
    Учр=GetCardFieldR(SelfCrd,Key[1],"Рекв");
    УчрНаим=GetCardFieldS(SelfCrd,Key[1],"Рекв.КорИмя");
    XXXXX=GetCardFieldS(SelfCrd,Key[1],"Рекв.РПО_КБП");
--    Секрет=GetCardFieldI(SelfCrd,Key[1],"Секрет");
 fi;
 Проверить(0,False);
end;

Proc ВыгрузитьРейс;
var OWA,State,Iter,F,n,У1,i1,n1,n2,nn,hНомРейс,w,ww:I;
var Buf,Cache,tmp:S;
var Updated:L;
var isBUAU,flagГЭК:L;
 for n=1..Упр do
  Msg[n]="Ожидание выгрузки...";
 od;
 if flagОтдРейс then У1=Упр; else У1=1; fi;
 for i1=1..У1 do
 if flagОтдРейс then ShowProgress(Упр,"Формирование рейса...."); fi;
 hНомРейс=НомРейс_;
 Cache=PlanVar("CACHE")+"\";
 ShowProgress(Упр,"Формирование рейса....");
 Try
  OWA=OpenWorkArea(SelfCrd,"","1=0");
  Try
    FTmp[i1]=Cache+GetGUID;
    FName[i1]=Folder+ИмяРейс;
    --поставить простановку!!!!!
    if not State=4 and not State=3 and ExistFile(FName[i1]):
        State=Enquiry("","Файл "+FName[i1]+" уже существует, перезаписать ?","Нет;Да;Нет для всех;Да для всех;Отмена",mtWarning);
        if State=5: Message("Отказ от формирования рейса",mtWarning); Exit; fi;
    fi;
    if not State=1 and not State=3:
       SetFilter(OWA,"UKey="+RecordToString(Key[i1]));
       F=TextFileCreate(FTmp[i1]);
       Try
        TextFileWriteLn(F,Head);
        --FROM Почтовая информация об отправителе файла
        TextFileAppendLn(F,"FROM|");
        --Уровень бюджета
        Buf=GetFieldS(OWA,1,"БАНК.РПО_КОДБЮДЖ");
        Buf=Fix(Buf);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код УБП
        Buf=GetFieldS(OWA,1,"Рекв.РПО_КБП");
        Buf=Fix(Buf);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование УБП
        Buf=GetFieldS(OWA,1,"Рекв.ПолнИмя");
        Buf=Fix(Buf);
        TextFileAppendLn(F,Buf);
        Buf=GetFieldS(OWA,1,"Рекв.РПО_ПолнИмя2");
        Buf=Fix(Buf);
        TextFileAppendLn(F,Buf);
        TextFileWriteLn(F,"|");
        --ТО Почтовая информация о получателе файла
        TextFileAppendLn(F,"TO|");
        --Код ОрФК
        Buf=GetFieldS(OWA,1,"БАНК.РПО_ОФК_КОД");
        Buf=Fix(Buf);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование ОрФК
        Buf=GetFieldS(OWA,1,"БАНК.РПО_ОФК_ИМЯ");
        Buf=Fix(Buf);
        TextFileAppendLn(F,Buf);
        Buf=GetFieldS(OWA,1,"БАНК.РПО_ОФК_ИМЯ2");
        Buf=Fix(Buf);
        TextFileAppendLn(F,Buf);
        TextFileWriteLn(F,"|");
        isBUAU=GetFieldS(OWA,1,"Рекв.РПО_ТипУчр")="АУ" or GetFieldS(OWA,1,"Рекв.РПО_ТипУчр")="БУ";

        if flagОтдРейс then
           n1=i1; n2=i1;
          else
           n1=1; n2=Упр;
        fi;
        Updated=False;
        for Iter=n1..n2 do
          ProgressPos(Iter);
          Msg[Iter]="ОШИБКА ВЫГРУЗКИ";
          SetFilter(OWA,"UKey="+RecordToString(Key[Iter]));
          --ZV Общая информация
          TextFileAppendLn(F,"ZV|");
          --Глобальный идентификатор заявки
          TextFileAppendLn(F,"|");
          --Номер заявки
          Buf=GetFieldS(OWA,1,"НомерДок");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Дата заявки
          Buf=DateToString(GetFieldD(OWA,1,"ДатаДок"));
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Наименование клиента
          if fКлиентКорИмя:
             Buf=GetFieldS(OWA,1,"Рекв.КорИмя");
             Buf=Fix(Buf);
            else
             Buf=GetFieldS(OWA,1,"Рекв.ПолнИмя");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             Buf=GetFieldS(OWA,1,"Рекв.РПО_ПолнИмя2");
             Buf=Fix(Buf);
          fi;
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Код клиента
          if GetFieldS(OWA,1,"БАНК.РПО_КодБюдж")="1":
             Buf=GetFieldS(OWA,1,"Рекв.РПО_КБП");
            else
             Buf="";
          fi;
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Номер лицевого счета клиента
          Buf=GetFieldS(OWA,1,"Банк.РПО_ЛСчет");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --ИНН клиента
          Buf=GetFieldS(OWA,1,"Рекв.ИНН");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --КПП клиента
          Buf=GetFieldS(OWA,1,"Рекв.КПП");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Наименование ГРБС
          Buf=GetFieldS(OWA,1,"ГРБС");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Глава по БК
          if isBUAU:
             Buf="";
            else
             Buf=GetFieldS(OWA,1,"Глава");
          fi;
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          if isBUAU:
             TextFileAppendLn(F,"|");
             TextFileAppendLn(F,"|");
             TextFileAppendLn(F,"|");
            else
             --Наименование бюджета
             Buf=GetFieldS(OWA,1,"Банк.РПО_НАИМБЮДЖ");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             Buf=GetFieldS(OWA,1,"Банк.РПО_НАИМБЮДЖ2");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             --Наименование финансового органа
             Buf=GetFieldS(OWA,1,"Банк.РПО_ФО_НАИМ1");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             Buf=GetFieldS(OWA,1,"Банк.РПО_ФО_НАИМ2");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             --Код ОКПО финансового органа
             Buf=GetFieldS(OWA,1,"Банк.РПО_ФО_ОКПО");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
          fi;
          --Код ОФК
          Buf=GetFieldS(OWA,1,"БАНК.РПО_ОФК_КОД");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Наименование ОФК
          Buf=GetFieldS(OWA,1,"БАНК.РПО_ОФК_ИМЯ");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          Buf=GetFieldS(OWA,1,"БАНК.РПО_ОФК_ИМЯ2");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          -- Код ФАИП (не заполняется до соответствующих разъяснений ФК)
          TextFileAppendLn(F,"|");
          --Должность руководителя
          Buf=GetFieldS(OWA,1,"ДолжнРук");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --ФИО руководителя
          Buf=GetFieldS(OWA,1,"ФИОРук");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Должность главного бухгалтера
          Buf=GetFieldS(OWA,1,"ДолжнБух");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --ФИО главного бухгалтера
          Buf=GetFieldS(OWA,1,"ФИОБух");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Дата подписания заявки
          Buf=DateToString(GetFieldD(OWA,1,"ДАТАПОДПИСИ"));
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          ------Отметка офк о постановке на учет
          --Номер заявки
          TextFileAppendLn(F,"|");
          --Должность ответственного исполнителя
          TextFileAppendLn(F,"|");
          --ФИО ответственного исполнителя
          TextFileAppendLn(F,"|");
          --Телефон ответственного исполнителя
          TextFileAppendLn(F,"|");
          --Дата постановки на учет
          TextFileWriteLn(F,"|");
          ------Отметка офк о постановке на учет
          --ZV Реквизиты документа
          TextFileAppendLn(F,"ZVDOC|");
          --Тип КБК
          Buf=GetFieldS(OWA,1,"ДОК_ТИПКБК");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Код БК
          Buf=GetFieldS(OWA,1,"ДОК_КБК");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Код цели
          Buf=GetFieldS(OWA,1,"ДОК_ДОПКЛ");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Код источника
          Buf=GetFieldS(OWA,1,"ДОК_ИСТ");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Код ОКТМО
          Buf=GetFieldS(OWA,1,"Док_ОКТМО");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Сумма документа в валюте выплаты
          Buf=Str(GetFieldN(OWA,1,"Док_Сум"),2);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Код валюты по ОКВ
          Buf=GetFieldS(OWA,1,"Док_ОКВ");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Сумма документа в рублях
          Buf=Str(GetFieldN(OWA,1,"Док_СумРуб"),2);
          if Buf="0.00": Buf=""; fi;
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Очередность платежа
          Buf=GetFieldS(OWA,1,"ДОК_ОЧРПЛ");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Вид платежа
          Buf=GetFieldS(OWA,1,"ДОК_ВИДПЛ");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Назначение платежа
          Buf=GetFieldS(OWA,1,"Док_НазнПл");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileWriteLn(F,"|");

          if not (GetFieldS(OWA,1,"Осн_ДокВид")='' and GetFieldS(OWA,1,"Осн_ДокНом")='' and GetFieldD(OWA,1,"ОСН_ДОКДАТ")=1.1.100) then
             --ZV Реквизиты документа-основания
             TextFileAppendLn(F,"ZVDOCOSN|");
             --Вид документа-основания
             Buf=GetFieldS(OWA,1,"Осн_ДокВид");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             --Номер документа-основания
             Buf=GetFieldS(OWA,1,"Осн_ДокНом");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             --Дата документа-основания
             Buf=DateToString(GetFieldD(OWA,1,"ОСН_ДОКДАТ"));
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileWriteLn(F,"|");
          fi;

          if not(GetFieldS(OWA,1,"ВОЗВРАТ_ДОКНОМ")='' and GetFieldS(OWA,1,"ВОЗВРАТ_ИНН")='' and GetFieldS(OWA,1,"ВОЗВРАТ_КПП")=''  and GetFieldD(OWA,1,"ВОЗВРАТ_ДОКДАТ")=1.1.100 and GetFieldN(OWA,1,"ВОЗВРАТ_ДОКСУМ")=0) then
             --ZV Реквизиты возвращаемого документа
             TextFileAppendLn(F,"ZVDOCVOZ|");
             --Глобальный идентификатор возвращаемого документа
             TextFileAppendLn(F,"|");
             --Номер возвращаемого документа
             Buf=GetFieldS(OWA,1,"ВОЗВРАТ_ДОКНОМ");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             --Дата возвращаемого документа
             Buf=DateToString(GetFieldD(OWA,1,"ВОЗВРАТ_ДОКДАТ"));
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             --Сумма документа в рублях
             Buf=Str(GetFieldN(OWA,1,"ВОЗВРАТ_ДОКСУМ"),2);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             --Очередность платежа
             Buf=GetFieldS(OWA,1,"ВОЗВРАТ_ИНН");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             --Вид платежа
             Buf=GetFieldS(OWA,1,"ВОЗВРАТ_КПП");
             Buf=Fix(Buf);
             TextFileAppendLn(F,Buf);
             TextFileWriteLn(F,"|");
          fi;
          --ZV Реквизиты получателя
          TextFileAppendLn(F,"ZVDOCPOL|");
          --Наименование/ФИО контрагента
          Buf=GetFieldS(OWA,1,"БанкП.БанкИмя");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --ИНН контрагента
          Buf=GetFieldS(OWA,1,"РеквП.ИНН");
          Buf=Fix(Buf);
          if Buf="": Buf="0"; fi;
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --КПП контрагента
          Buf=GetFieldS(OWA,1,"РеквП.КПП");
          Buf=Fix(Buf);
          if Buf="": Buf="0"; fi;
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Код по БК получателя
          Buf=GetFieldS(OWA,1,"КБК_П");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --ОКТМО получателя
          Buf=GetFieldS(OWA,1,"ОКТМО_П");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Лицевой счет контрагента
          Buf=GetFieldS(OWA,1,"БанкП.РПО_ЛСЧЕТ");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Банковский счет контрагента
          Buf=GetFieldS(OWA,1,"БанкП.РСЧЕТ");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Наименование банка контрагента
          Buf=GetFieldS(OWA,1,"БанкП.БАНК")+if(fДобГородВБанк,' '+GetFieldS(OWA,1,"БанкП.ГОРОД"),"");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Бик банка контрагента
          Buf=GetFieldS(OWA,1,"БанкП.БИК");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Корсчет банка контрагента
          Buf=GetFieldS(OWA,1,"БанкП.КСЧЕТ");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileWriteLn(F,"|");
          --
          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;
          --
          if CanUpdate(SelfCrd):
             BeginChanging(OWA,True);
             Try
              n=PutFieldI(OWA,1,"НомРейс",НомРейс_);
              n=PutFieldD(OWA,1,"ДатаРейс",ДатаРейс);
              n=PutFieldL(OWA,1,"ВБанк",True);
              EndChanging(OWA);
              Updated=True;
             Except
              CancelChanging(OWA);
              Raise;
             end;
          fi;
        od; --for Iter=1..Упр do
       Finally
        TextFileClose(F);
       end;
       CopyFile(FTmp[i1],FName[i1]);
       for Iter=n1..n2 do
        if not ExistFile(FName[i1]): Message("Выгрузка прервана",mtError); Exit; fi;
        Msg[Iter]="Заявка успешно выгружена в файл: "+FName[i1];
       od;
       if Updated then
          НомРейсСлед;
         else
          НомРейс_=НомРейс_+1;
          While НомРейсИспользуется(ДатаРейс,НомРейс_) do
           НомРейс_=НомРейс_+1;
          od;
       fi;
      else
       Msg[Iter]="Файл уже существует. Выгрузка не производилась";
    fi; --if not State=1:
    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]="":
           if ФорматГЭК=0:
              if ExistFile(FTmpГЭК[Iter]):
                 if fПапкаГЭК:
                    tmp=FolderГЭК+"ЗВЗ"+НомДок[Iter];
                    CreateFolder(tmp);
                    tmp=tmp+"\ЗКР"+НомДок[Iter]+".pdf";
                   else
                    tmp=FolderГЭК+"ЗВЗ"+НомДок[Iter]+".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ГЭК+"ЗВЗ"+НомДок[Iter];
                    CreateFolder(tmp);
                    tmp=tmp+"\ЗВЗ"+НомДок[Iter]+".";
                   else
                    tmp=FolderГЭК+"ЗВЗ"+НомДок[Iter]+".";
                 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)+"ЗВЗ"+НомДок[Iter]+".лист"+Format("%.2D",n)+".jpg";
                        FNameГЭК[Iter]=FNameГЭК[Iter]+";ЗВЗ"+НомДок[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);
   CloseProgress;
  end;
  if Match(Folder,"A:*") or Match(Folder,"B:*"):
     if EnqOkCancel("Сделать копию выгруженных данных на другой носитель?",mtConfirmation)=cmOk:
        State=0;
        for Iter=1..Упр do
         if not State=4 and not State=3 and ExistFile(FName[i1]):
             State=Enquiry("","Файл "+FName[i1]+" уже существует, перезаписать ?","Нет;Да;Нет для всех;Да для всех;Отмена",mtWarning);
             if State=5: Message("Отказ от создания копии",mtWarning); Exit; fi;
         fi;
         if not State=1 and not State=3:
            CopyFile(FTmp[i1],FName[i1]);
         fi;
        od;
     fi;
  fi;
 Finally
  for Iter=1..Упр do
   if ExistFile(FTmp[Iter]): 
      DeleteFile(FTmp[Iter]); FTmp[Iter]=""; 
   fi;
   if not FTmpГЭК[Iter]="": 
      if ExistFile(FTmpГЭК[Iter]): DeleteFile(FTmpГЭК[Iter]); FTmpГЭК[Iter]=""; fi;
   fi;
  od;
 end;
 od;
 if not hНомРейс=НомРейс_:
    Message("Рейс успешно сформирован"+Chr(13)+"Для просмотра сформированных фалов нажмите на поле 'Статус'");
    Template.Field="Msg"; Template.Frame=1;
 fi;
end;

Proc ЗаполнитьЗаказчика(Rec: Record);
 if not Rec=nil:
    Учр=Rec;
    УчрНаим=GetCardFieldS("Контрагент",Rec,"КорИмя");
    XXXXX=GetCardFieldS("Контрагент",Rec,"РПО_КБП");
    if not Length(XXXXX)=5: XXXXX=""; fi;
 fi;
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;
 Учр=Rec;
 УчрНаим=GetCardFieldS("Контрагент",Rec,"КорИмя");
 tmp=GetCardFieldS("Контрагент",Rec,"РПО_КБП");
 if not Length(tmp)=5: Message("Длина кода должна быть 5 символов",mtError); ^Cur; fi;
 XXXXX=tmp;
 Return Cur;
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 fВЛВС:
    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);
 ^True;
end;

Func НомРейс_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var OWA,nr,n:I;
 Template.HideEditor(False);
 ClearVariable(Buf);
 OWA=OpenWorkArea(SelfCrd,"НомРейс","not ДатаРейс=1.1.100 and ДатаРейс="+DateToString(ДатаРейс));
 Try
  nr=Records(OWA);
  for n=1..nr do
   Buf[n]="Рейс №"+Str(GetFieldI(OWA,n,"НомРейс"))+" от "+GetFieldS(OWA,n,"ДАТАДОК");
  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(SubStr(Buf[n],7,Pos(" от",Buf[n])-7));
 ЗагрузитьРейс(ДатаРейс,n);
 Return Cur;
end;

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

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

Func ВзятьИзЗВЗ_Учр_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile(SelfCrd,"--Учитывать");
 if not Rec=nil:
    ЗаполнитьЗаказчика(GetCardFieldR(SelfCrd,Rec,"Рекв"));
    Очистить(0);
 fi;
 Return False;
end;

Proc Д_OnExit(FieldName: String; Iter: Integer);
 Очистить(0);
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);
 Очистить(0);
 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;
 fВЛВС=Секрет>1;
 if not ДатаРейс=1.1.100: НомРейсСлед; fi;
 Очистить(0);
 Return False;
end;

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

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

Func D_onEnter (Field:String; Iter:Integer):Logical;
 DeleteFrame(Упр,Iter);
 ^false;
end;

Func Док_onEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
var F:S;
 if Учр=nil or УчрНаим="": Message("Выберите собственные реквизиты",mtError); Template.Field="УчрНаим"; ^False; fi;
 F=ПолучитьФильтр(Iter,nil);
 if FieldName="НомДок_":
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор заявки",SelfCrd,"НомерДок|ДатаДок:D|РеквП:R#Контрагент@КорИмя","Номер заявки|Дата заявки|Контрагент",F);
   else
    Rec=OpenCardFile(SelfCrd,"--"+F,Key[Iter]);
 fi;
 if not Rec=nil:
    if ПроверитьУникальность(Rec,Iter):
       ЗагрузитьДок(Iter,ПолучитьФильтр(Iter,Rec));
       Проверить(Iter,False);
    fi;
 fi;
 Return False;
end;

Proc Док_onExit(FieldName: String; Iter: Integer);
 Очистить(Iter);
end;

Func НомДок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 Док_onEnter(AsString(Template.Field),AsInteger(Template.Frame));
 Return Cur;
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(Key[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,ww:I;
var tmp:S;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if Match(Msg[Iter],"Заявка успешно выгружена в файл:*"): 
    ExecuteProgram("NotePad '"+FName[Iter]+"'");
    if not FNameГЭК[Iter]="":
       ww=WordsCount(FNameГЭК[Iter],";");
       tmp=ExtractWord(1,FNameГЭК[Iter],";");
       ExecuteProgram('"'+tmp+'"');
    fi;
   |not Err[Iter]=0 or not Wrn[Iter]=0:
    OpenBlank("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_НАЛ",True,Key[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(Wrn,Упр)=0:
    if EnqOkCancel("В результате проверки обнаружено предупреждений :"+Str(SumOfArray(Wrn,Упр))+" Игнорировать предупреждения ?",mtWarning)=cmCancel:  Exit; fi;
 fi;
 if Путь="":
    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=Раб.вспом.СЭД.ПолучитьПапку("ZV","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);
 Close;
end;

Proc btnСледНом_onClick (Obj:S);
 if ДатаРейс=1.1.100: Message("Введите дату формирования документов (рейса)",mtError); Template.Field="ДатаРейс"; Exit; fi;
 НомРейсСлед;
end;

Proc cbИсклВыгруж_OnChange(Sender: String);
 Очистить(0);
end;

Proc btnОчистить_onClick (Obj:S);
 if EnqOkCancel("Список будет очищен, продолжить ?",mtWarning)=cmCancel: Exit; fi;
 Очистить(0);
end;

Proc btnЗагрузить_onClick(Sender: String);
 if Учр=nil or УчрНаим="": Message("Выберите собственные реквизиты",mtError); Template.Field="УчрНаим"; Exit; fi;
 ЗагрузитьДок(0,ПолучитьФильтр(0,nil));
 Проверить(0,False);
end;

Proc btnПроверить_onClick (Obj:S);
 Проверить(0,False);
end;

Proc btnНаОшибку_OnClick(Sender: String);
 if SumOfArray(Err)=0 then 
    if SumOfArray(Wrn)=0 then Message('Ошибок не обнаружено'); Exit; fi;
    НаОшибку(False);
   else
    НаОшибку(True);
 fi;
end;

Proc btnОпись_OnClick(Sender: String);
var Iter,n:I;
var bln:S;
 bln="ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК";
 ExecuteProc(bln+".ОчиститьBuf");
 PutVariableS(bln+".Режим","ЗВЗ");
 PutVariableD(bln+".ДатаОпись",ДатаРейс);
 for Iter=1..Упр do
  if not Key[Iter]=nil:
     n=n+1;
     PutVariableR(bln+".BufДок["+Str(n)+"]",Key[Iter]);
  fi;
 od;
 PutVariableS(bln+".GUID",GetGUID);
 OpenBlank(bln,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 Template_onOpen(Create:L);
var Rec: Record;
 Инициализация;
 ДатаРейс=ToDay;
 НомРейсСлед;
 if XXXXX="" or Учр=nil:
    Rec=Раб.Бюджет2005.НашРекв;
    ЗаполнитьЗаказчика(Rec);
 fi;
 Настр(False);
 Оформление;
end;

Proc Template_onClose(Destroy:L);
-- Очистить;
end;
--Обработчики событий шаблона -----
--

Конец
