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

var Упр:Handle;

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

Var bFlagOrder: Logical;
FlagЛВС  :L;
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+НомРейс+".ZS"+M,ИмяРейс_);
Путь:S;
ПутьГЭК:S;

var ДН:D=[ToDay];
var ДК:D=[ToDay];
ИсклВыгруж:L=[True];
Рекв:Record;
Банк:Record;
Отправ:S;
ОтправБанк:S;

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

var accept:String;

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

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

var пп[]:i=$;
var НомДок[]:S;
var НомДок_:S="";
var ДатаДок[]:D;
var ДатаДок_:D=1.1.100;
var СумДок[]:N;
var ГЭК_[]:S;
var Msg[]:S;
var Msg_:S="";
var Wrng[]:I;
var Err[]:I;
var UKey[]:Record;
var FTmp[]:S;
var FName[]:S;
var WrngT[]:S;
var ErrT[]:S;
var ГЭК[]:S;
var FTmpГЭК[]:S;
var FNameГЭК[]:S;


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

var ДовЛицо_Должн:S;
var ДовЛицо_ФИО:S;


var ППП:S;
var ФКР:S;
var КЦСР:S;
var КВР:S;
var ЭКР:S;
var КИВнФ:S;
var КИВФ:S;
var КД:S;
var ДКЛ:S;
var СумБК:N;
var Тип:S;

Folder:S;

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

var Buf[]:S;

var НастрGUID:S;
--
--Процедуры и функции -------------
Proc Настр(aСохр:L);
 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..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;
-- ^Up(Раб.Формат.ReplaceSubstr(Mystring,"№","N"));
 ^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;
 od;
 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;

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

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

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

Func ПроверитьУникальность(Rec:Record; Iter:I):L;
var z:i;
 z=SearchInArray(UKey,Rec,False,1);
 if not z=-1:
    if z=Iter: z=SearchInArray(UKey,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 UKey[Iter]=nil: DeleteFrame(Упр,Iter);
   else 
    Iter=Iter+1;
  fi; 
 od;
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]=GetFieldN(OWA,n,"СумДок");
   UKey[i]=GetRecordKey(OWA,n);
   РасчетГЭК(OWA,n,i);
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
end;

var BufСум[]:N;
var Buf[]:S;
var BufИСТ[]:S;
var BufТИПКБК[]:S;
var BufКБК[]:S;
var BufДопКл[]:S;
var BufНазнПл[]:S;
var BufПримеч[]:S;

Func РасчетРаздела(aHandle: S; OWA: I; ДопФ: S): I;
var nn, z, iOA: I;
var Ист, ТипКБК, КБК, НазнПл, ДопКл, Примеч: S;
var Сум: N;
  ClearVariable(Buf);
  ClearVariable(BufТипКБК);
  ClearVariable(BufИСТ);
  ClearVariable(BufКБК);
  ClearVariable(BufДопКл);
  ClearVariable(BufСум);
  ClearVariable(BufНазнПл);
  ClearVariable(BufПримеч);
  iOA=OpenArray(OWA,1,aHandle,"",ДопФ);
  for nn=1 to Records(iOA) do
   ТипКБК=GetFieldS(iOA,nn,"ТипКБК");
   Ист=GetFieldS(iOA, nn,"Ист");
   КБК=GetFieldS(iOA, nn,"КБК");
   ДопКл=GetFieldS(iOA, nn,"ДопКл");
   НазнПл=GetFieldS(iOA, nn,"НазнПл");
   Сум=GetFieldN(iOA, nn,"СУМ");
   Примеч=GetFieldS(iOA,nn,"Примеч");
   z=SearchInArray(Buf,Ист+ТипКБК+КБК+'#'+ДопКл+'#'+НазнПл+'#'+Примеч,True);
   if z=-1:
      z=InsertInArraySort(Buf,Ист+ТипКБК+КБК+'#'+ДопКл+'#'+НазнПл+'#'+Примеч);
      InsertInArray(BufИст,z,Ист);
      InsertInArray(BufТипКБК,z,ТипКБК);
      InsertInArray(BufКБК,z,КБК);
      InsertInArray(BufНазнПл,z,НазнПл);
      InsertInArray(BufДопКл,z,ДопКл);
      InsertInArray(BufСум,z,Сум);
      InsertInArray(BufПримеч,z,Примеч);
     else
      BufСум[z]=BufСум[z]+Сум;
      --BufПримеч[z]=BufПримеч[z]+Примеч;
   fi;
  od;
  CloseWorkArea(iOA);
  Return LengthOfArray(Buf);
end;

Func Проверить(Iter:I; Full:L):L;
var OWA,OA,n,n2,nr2,z1,z2:i;
var tmp:S;
var isBUAU:L;
 Настр(False);
 if Iter=0: 
    УдалитьПустыеСтроки; 
    if Ukey[1]=nil: Message("Заполните список выгружаемых заявок",mtError); ^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,"","1=0");
 if z2-z1>0: ShowProgress(z2-z1,"Проверка...."); fi;
 Try
  for n=z1..z2 do
   ProgressPos(n);
   SetFilter(OWA,"UKey="+RecordToString(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;
      --Общая информация
      --N Заявки
      tmp=ПроверкаНаСтандарт (1,-15,Trim(GetFieldS(OWA,1,"НомерДок")),"Номер заявки",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --Дата заявки
      if GetFieldD(OWA,1,"ДатаДок")=1.1.100: AddMsg("Заполните дату заявки",n,True);   fi;
      --Информация о платильщеке
      isBUAU=False;
      if GetFieldR(OWA,1,"Рекв")=nil:
         AddMsg("Выберите плательщика",n,True);
        else
        isBUAU=GetFieldS(OWA,1,"Рекв.РПО_ТипУчр")="АУ" or GetFieldS(OWA,1,"Рекв.РПО_ТипУчр")="БУ";
        --Код бюджетополучателя - платильщика
        tmp=ПроверкаНаСтандарт (1,5,Trim(GetFieldS(OWA,1,"Рекв.РПО_КБП")),"Код бюджетополучателя - платильщика",n);
        if tmp<>"" : AddMsg(tmp,n,True);   fi;
        --Полное наименование бюджетополучателя - платильщика
        tmp=ПроверкаНаСтандарт (1,-255,GetFieldS(OWA,1,"Рекв.ПолнИмя"),"Полное наименование платильщика",n);
        if tmp<>"" : AddMsg(tmp,n,True);   fi;
        tmp=ПроверкаНаСтандарт (-1,-255,GetFieldS(OWA,1,"Рекв.РПО_ПолнИмя2"),"Полное наименование платильщика",n);
        if tmp<>"" : AddMsg(tmp,n,True);   fi;
      fi; --if GetFieldR(OWA,1,"ПБС")=nil:
      if GetFieldR(OWA,1,"БАНК")=nil:
         AddMsg("Не выбран банковский реквизит клиента",n,True);
        else
         --Уровень бюджета
         tmp=ПроверкаНаСтандарт (1,1,Trim(GetFieldS(OWA,1,"Банк.РПО_КодБюдж")),"Уровень бюджета",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
         --Наименование бюджета
         if not GetFieldS(OWA,1,"Банк.РПО_КодБюдж")="6":
            tmp=ПроверкаНаСтандарт (if(isBUAU,-1,1),-255,Trim(GetFieldS(OWA,1,"Банк.РПО_НаимБюдж")),"Наименование бюджета",n);
            if tmp<>"" : AddMsg(tmp,n,not isBUAU);   fi;
         fi;
         --Финансовый орган
         if not GetFieldS(OWA,1,"Банк.РПО_КодБюдж")="6":
            tmp=ПроверкаНаСтандарт (if(isBUAU,-1,1),-255,Trim(GetFieldS(OWA,1,"Банк.РПО_ФО_Наим1")),"Наименование финансового органа",n);
            if tmp<>"" : AddMsg(tmp,n,not isBUAU);   fi;
            tmp=ПроверкаНаСтандарт (-1,-255,Trim(GetFieldS(OWA,1,"Банк.РПО_ФО_Наим2")),"Наименование финансового органа",n);
            if tmp<>"" : AddMsg(tmp,n,not isBUAU);   fi;
            tmp=ПроверкаНаСтандарт(1,8,GetFieldS(OWA,1,"Банк.РПО_ФО_ОКПО"),"ОКПО финансового органа",n);
            if tmp<>"" : AddMsg(tmp,n,not isBUAU);   fi;
         fi;
         --Лицевой счет плательщика
         tmp=ПроверкаНаСтандарт (1,11,Trim(GetFieldS(OWA,1,"Банк.РПО_ЛСчет")),"Лицевой счет плательщика",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
         --Код ТОФК
         tmp=ПроверкаНаСтандарт (1,4,Trim(GetFieldS(OWA,1,"Банк.РПО_ОФК_Код")),"Код ТОФК плательщика",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
         --Наименование органа ФК - плательщика
         tmp=ПроверкаНаСтандарт (1,-255,Trim(GetFieldS(OWA,1,"Банк.РПО_ОФК_Имя")),"Наименование органа ФК плательщика",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
         tmp=ПроверкаНаСтандарт (-1,-255,Trim(GetFieldS(OWA,1,"Банк.РПО_ОФК_Имя2")),"Наименование органа ФК плательщика",n);
         if tmp<>"" : AddMsg(tmp,n,True);   fi;
      fi;--if GetFieldR(OWA,1,"ПБС_БАНК")=nil:
      --Главный распорядитель
      tmp=ПроверкаНаСтандарт (if(GetFieldS(OWA,1,"Банк.РПО_КодБюдж")="6",0,1),-255,Trim(GetFieldS(OWA,1,"ГРБС")),"Главный распорядитель бюджетных средств",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --Глава по БК
      tmp=ПроверкаНаСтандарт (if(isBUAU or GetFieldS(OWA,1,"Банк.РПО_КодБюдж")="6",-1,1),3,Trim(GetFieldS(OWA,1,"Глава")),"Глава по БК",n);
      if tmp<>"" : AddMsg(tmp,n,not isBUAU);   fi;
      --Пределеьная дата исполнения
      --Номер БО
      if not GetFieldS(OWA,1,"Банк.РПО_КодБюдж")="6":
         tmp=ПроверкаНаСтандарт (-1,16,Trim(GetFieldS(OWA,1,"НомерБО")),"Номер бюджетного обязательства",n);
         if tmp<>"" : AddMsg(tmp,n,not isBUAU);   fi;
      fi;
      --Должность руководителя
      tmp=ПроверкаНаСтандарт (-1,-100,Trim(GetFieldS(OWA,1,"ДолжнРук")),"Должность руководителя",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --ФИО руководителя
      tmp=ПроверкаНаСтандарт (1,-50,Trim(GetFieldS(OWA,1,"ФиоРук")),"ФИО руководителя",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --Должность главного бухгалтера
      tmp=ПроверкаНаСтандарт (-1,-100,Trim(GetFieldS(OWA,1,"ДолжнБух")),"Должность главного бухгалтера",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --ФИО главного бухгалтера
      tmp=ПроверкаНаСтандарт (-1,-50,Trim(GetFieldS(OWA,1,"ФИОБух")),"ФИО главного бухгалтера",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --Дата подписания документа
      if GetFieldD(OWA,1,"ДАТАПОДПИСИ")=1.1.100: AddMsg("Заполните дату подписания документа",n,True);     fi;
      --Должность доверительного лица
      tmp=ПроверкаНаСтандарт (1,-100,Trim(GetFieldS(OWA,1,"ДолжнДов")),"Должность доверительного лица",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --ФИО доверительного лица
      tmp=ПроверкаНаСтандарт (1,-50,Trim(GetFieldS(OWA,1,"ФИОДов")),"ФИО доверительного лица",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --Наименование документа удостверяющего личность
      tmp=ПроверкаНаСтандарт (1,-255,Trim(GetFieldS(OWA,1,"НаимДокДов")),"Наименование документа удостверяющего личность",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --Номер документа удостверяющего личность
      tmp=ПроверкаНаСтандарт (1,-20,Trim(GetFieldS(OWA,1,"НомДокДов")),"Номер документа удостверяющего личность",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --Организация, выдавшая документ, удостоверяющий личность
      tmp=ПроверкаНаСтандарт (1,-255,Trim(GetFieldS(OWA,1,"ВыданДокДов")),"Организация, выдавшая документ, удостоверяющий личность",n);
      if tmp<>"" : AddMsg(tmp,n,True);   fi;
      --Дата выдачи документа,  удостоверяющий личность
      if GetFieldD(OWA,1,"ДатДокДов")=1.1.100: AddMsg("Заполните дату выдачи документа удостоверяющего личность",n,True);   fi;
      --Сумма заявки
      if Round(GetFieldN(OWA,1,"СумДок"),2)=0: AddMsg("Заполните сумму заявки",n,True);     fi;
      --Реквизиты чека
      ClearVariable(Buf);
      СумБК=0;
      OA=OpenArray(OWA,1,"Чек","");
      nr2=Records(OA);
      for n2=1..nr2 do
       --Сумма по классификации
       СумБК=СумБК+Round(GetFieldN(OA,n2,"Сум"),2);
       if not GetFieldS(OA,n2,"Символ")="" and Round(GetFieldN(OA,n2,"Сум"),2)=0: AddMsg("Заполните сумму по символу кассового плана"+GetFieldS(OA,n2,"Символ"),n,True); fi;
       --Номер чека
       tmp=ПроверкаНаСтандарт (1,-15,GetFieldS(OA,n2,"Номер"),'Номер чека (строка №'+Str(n2)+')',n);
       if tmp<>"" : AddMsg(tmp,n,True);   fi;
       --Серия чека
       tmp=ПроверкаНаСтандарт (1,-30,GetFieldS(OA,n2,"Серия"),'Серия чека (строка №'+Str(n2)+')',n);
       if tmp<>"" : AddMsg(tmp,n,True);   fi;
       --Дата чека
       if GetFieldD(OA,1,"Дата")=1.1.100: AddMsg('Заполните дату чека (строка №'+Str(n2)+')',n,True); fi;
       --Срок действия чека
       if GetFieldD(OA,1,"Срок")=1.1.100: AddMsg('Заполните срок действия чека (строка №'+Str(n2)+')',n,True);   fi;
       --Символ кассового плана
       tmp=ПроверкаНаСтандарт (1,2,GetFieldS(OA,n2,"Символ"),'Символ кассового плана (строка №'+Str(n2)+')',n);
       if tmp<>"" : AddMsg(tmp,n,True);   fi;
       AddInArray(Buf,True,False,GetFieldS(OA,n2,"Символ"));
      od;
      CloseWorkArea(OA);
      --
      if not Round(GetFieldN(OWA,1,"СумДок"),2)=Round(СумБК,2): AddMsg("Сумма заявки не равна сумме по чекам",n,True); fi;
      --Расшифровка заявки
      bFlagOrder=GetFieldL(OWA,1,"СимволРасшифр");
      СумБК=0;
      OA=OpenArray(OWA,1,"Расшифр","");
      nr2=Records(OA);
      for n2=1..nr2 do
       --Код источника финансирования
       tmp=ПроверкаНаСтандарт (1,1,GetFieldS(OA,n2,"Ист"),'Источник финансирования (строка №'+Str(n2)+')',n);
       if tmp<>"" : AddMsg(tmp,n,True);   fi;
       --Код КБК
       tmp=ПроверкаНаСтандарт (0,20,GetFieldS(OA,n2,"КБК"),'КБК (строка №'+Str(n2)+')',n);
       if tmp<>"" : AddMsg(tmp,n,True);   fi;
       --Тип КБК
       tmp=ПроверкаНаСтандарт (0,2,GetFieldS(OA,n2,"ТипКБК"),'Тип КБК (строка №'+Str(n2)+')',n);
       if tmp<>"" : AddMsg(tmp,n,True);   fi;
       --Назначение платежа
       tmp=ПроверкаНаСтандарт (0,-210,GetFieldS(OA,n2,"НазнПл"),'Назначение платежа (строка №'+Str(n2)+')',n);
       if tmp<>"" : AddMsg(tmp,n,True);   fi;
       --Примечание
       tmp=ПроверкаНаСтандарт (-1,-254,GetFieldS(OA,n2,"Примеч"),'Примечание (строка №'+Str(n2)+')',n);
       if tmp<>"" : AddMsg(tmp,n,True);   fi;
       --Символ кассового плана
       if bFlagOrder:
          if GetFieldS(OA,n2,"Символ")="": 
             AddMsg('Отсутствует сопоставление с символом кассового плана (строка №'+Str(n2)+')',n,True);
            else
             tmp=ПроверкаНаСтандарт (1,2,GetFieldS(OA,n2,"Символ"),'Символ кассового плана (строка №'+Str(n2)+')',n);
             if tmp="":
                if SearchInArray(Buf,GetFieldS(OA,n2,"Символ"),True)=-1: AddMsg('Символ ('+GetFieldS(OA,n2,"Символ")+') (строка №'+Str(n2)+') не найден в реквизитах чека',n,True); fi;
               else
                AddMsg(tmp,n,True);
             fi;
          fi;
       fi;
       --Доп классификация
       tmp=ПроверкаНаСтандарт(if(Substr(GetFieldS(OWA,1,"Банк.РПО_ЛСчет"),1,2)="21" or Substr(GetFieldS(OWA,1,"Банк.РПО_ЛСчет"),1,2)="41",1,-1),-20,GetFieldS(OA,n2,"ДопКл"),'Дополнительная классификация (строка №'+Str(n2)+')',n);
       if tmp<>"" : AddMsg(tmp,n,True);   fi;
       --Сумма по классификации
       СумБК=СумБК+Round(GetFieldN(OA,n2,"СУМ"),2);
       if not GetFieldS(OA,n2,"КБК")="" and Round(GetFieldN(OA,n2,"СУМ"),2)=0: AddMsg("Заполните сумму по бюджетной классификации "+GetFieldS(OA,n2,"КБК"),n,True); fi;
      od;
      CloseWorkArea(OA);
      --
      if not Round(GetFieldN(OWA,1,"СумДок"),2)=Round(СумБК,2): AddMsg("Сумма заявки не равна сумме по КБК",n,True); fi;
      --Проверка выгрузки
      if not GetFieldI(OWA,1,"НомРейс")=0 and not GetFieldD(OWA,1,"ДатаРейс")=1.1.100:
         Msg[n]=Msg[n]+if(Msg[n]='','',Chr(13))+ "Заявка уже выгружалсь рейсом №"+Str(GetFieldI(OWA,1,"НомРейс"))+" от "+DateToString(GetFieldD(OWA,1,"ДатаРейс"));
      fi;
      РасчетГЭК(OWA,1,n);
     else
      AddMsg("Заявка не найдена",n,True);
   fi; --if Records(OWA)>0:
   if Err[n]=0 and Wrng[n]=0: Msg[n]="Проверка пройдена"; fi;
   if Length(Msg[n])>252: Msg[n]=SubStr(Msg[n],1,252)+"...."; 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 ЗагрузитьРейс (ДР:D; НР:I);
 ЗагрузитьДок (0,"НомРейс="+Str(НР)+" and ДатаРейс>="+DateToString(ДР)+" and ДатаРейс<="+DateToString(ДР));
 if not UKey[1]=nil:
    Рекв=GetCardFieldR(SelfCrd,UKey[1],"Рекв");
    Отправ=GetCardFieldS(SelfCrd,UKey[1],"Рекв.КорИмя");
    Банк=GetCardFieldR(SelfCrd,UKey[1],"Банк");
    ОтправБанк=GetCardFieldS(SelfCrd,UKey[1],"Банк.РПО_ЛСЧЕТ")+" в "+GetCardFieldS(SelfCrd,UKey[1],"Банк.РПО_ОФК_ИМЯ")+" ("+GetCardFieldS(SelfCrd,UKey[1],"Банк.РПО_Коммент")+")";
    XXXXX=GetCardFieldS(SelfCrd,UKey[1],"Рекв.РПО_КБП");
--    Секрет=GetCardFieldI(SelfCrd,UKey[1],"Секрет");
 fi;
 Проверить(0,False);
end;

Proc ВыгрузитьРейс;
var OWA,OA,State,Iter,F,n,nr,nn,n1,nr1,w,ww,hНомРейс_:I;
var Buf,tmp,Cache,FolderГЭК:S;
var isBUAU,flagГЭК:L;
 for n=1..Упр do
  Msg[n]="Ожидание выгрузки...";
 od;
 hНомРейс_=НомРейс_;
 Cache=PlanVar("CACHE")+"\";
 ShowProgress(Упр,"Формирование рейса....");
 Try
  OWA=OpenWorkArea(SelfCrd,"","1=0");
  Try
   for Iter=1..Упр do
    ProgressPos(Iter);
    FTmp[Iter]=Cache+GetGUID;
    FName[Iter]=Folder+ИмяРейс;
    if not State=4 and not State=3 and ExistFile(FName[Iter]):
       State=Enquiry("","Файл "+FName[Iter]+" уже существует, перезаписать ?","Нет;Да;Нет для всех;Да для всех;Отмена",mtWarning);
       if State=5: Message("Отказ от формирования рейса",mtWarning); Exit; fi;
    fi;
    if not State=1 and not State=3:
       SetFilter(OWA,"UKey="+RecordToString(UKey[Iter]));
       F=TextFileCreate(FTmp[Iter]);
       Try
        Msg[Iter]="ОШИБКА ВЫГРУЗКИ";
        TextFileWriteLn(F,"FK|TXZS140101|Турбо Бухгалтер 6.9 Бюджет-157н "+SubStr(Str(Версия.Сборка0),1,2)+"|"+SubStr(Str(Версия.Сборка0)+if(Версия.Сборка1<>0,"."+Str(Версия.Сборка1),"")+Версия.Сборка2,1,10)+"||");
        --Информация об отправителе
        isBUAU=GetFieldS(OWA,1,"Рекв.РПО_ТипУчр")="АУ" or GetFieldS(OWA,1,"Рекв.РПО_ТипУчр")="БУ";
        TextFileAppendLn(F,"FROM|");
        --Уровень бюджета
        Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_КодБюдж"));
        Buf=SubStr(Buf,1,1);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код УБП
        Buf=Trim(GetFieldS(OWA,1,"Рекв.РПО_КБП"));
        Buf=SubStr(Buf,1,5);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование УБП
        Buf=Trim(GetFieldS(OWA,1,"Рекв.ПолнИмя"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        Buf=trimRight(GetFieldS(OWA,1,"Рекв.РПО_ПолнИмя2"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        TextFileWriteLn(F,"|");
        --Информация о получателе
        TextFileAppendLn(F,"TO|");
        --Код ОФК
        Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_ОФК_Код"));
        Buf=SubStr(Buf,1,4);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование ОФК
        Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_ОФК_Имя"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_ОФК_Имя2"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        TextFileWriteLn(F,"|");
        --Общая информация
        TextFileAppendLn(F,"ZS|");
        --Глобальный уникальный идентификатор
        TextFileAppendLn(F,"|");
        --N Заявки
        Buf=Trim(GetFieldS(OWA,1,"НомерДок"));
        Buf=SubStr(Buf,1,15);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Дата заявки
        Buf=DateToString(GetFieldD(OWA,1,"ДатаДок"));
        Buf=Trim(Buf);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование бюджета
        if Trim(GetFieldS(OWA,1,"Банк.РПО_КодБюдж"))="6" or isBUAU:
           Buf="";
          else
           Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_НаимБюдж"));
           Buf=SubStr(Buf,1,255);
        fi;
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        if Trim(GetFieldS(OWA,1,"Банк.РПО_КодБюдж"))="6" or isBUAU:
           TextFileAppendLn(F,"|");
           TextFileAppendLn(F,"|");
          else
           --Наименование финансового органа
           Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_ФО_Наим1"));
           TextFileAppendLn(F,Buf);
           Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_ФО_Наим2"));
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
           --Код ОКПО финансового органа
           Buf=GetFieldS(OWA,1,"Банк.РПО_ФО_ОКПО");
           TextFileAppendLn(F,Buf);
           TextFileAppendLn(F,"|");
        fi;
        --Главный распорядитель
        Buf=Trim(GetFieldS(OWA,1,"ГРБС"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Глава
        Buf=Trim(GetFieldS(OWA,1,"Глава"));
        Buf=SubStr(Buf,1,3);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование УБП
        Buf=Trim(GetFieldS(OWA,1,"Рекв.ПолнИмя"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        Buf=TrimRight(GetFieldS(OWA,1,"Рекв.РПО_ПолнИмя2"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код УБП
        if Trim(GetFieldS(OWA,1,"Банк.РПО_КодБюдж"))="1" then
           Buf=Trim(GetFieldS(OWA,1,"Рекв.РПО_КБП"));
           Buf=SubStr(Buf,1,5);
           TextFileAppendLn(F,Buf);
        fi;
        TextFileAppendLn(F,"|");
        --N лицевого счета
        Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_ЛСчет"));
        Buf=SubStr(Buf,1,11);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование ОФК
        Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_ОФК_Имя"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_ОФК_Имя2"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Код ОФК
        Buf=Trim(GetFieldS(OWA,1,"Банк.РПО_ОФК_Код"));
        Buf=SubStr(Buf,1,4);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Предельная дата исполнения
        if Trim(GetFieldS(OWA,1,"Банк.РПО_КодБюдж"))="6" or isBUAU:
           Buf="";
          else
           Buf=DateToString(GetFieldD(OWA,1,"ДатаИспол"));
           Buf=Trim(Buf);
        fi;
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Номер БО
        if Trim(GetFieldS(OWA,1,"Банк.РПО_КодБюдж"))="6" or isBUAU:
           Buf="";
          else
           Buf=Trim(GetFieldS(OWA,1,"НомерБО"));
           Buf=SubStr(Buf,1,16);
        fi;
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Должность руководителя
        Buf=Trim(GetFieldS(OWA,1,"ДолжнРук"));
        Buf=SubStr(Buf,1,100);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --ФИО руководителя
        Buf=Trim(GetFieldS(OWA,1,"ФИОРук"));
        Buf=SubStr(Buf,1,50);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Должность главного бухгалтера
        Buf=Trim(GetFieldS(OWA,1,"ДолжнБух"));
        Buf=SubStr(Buf,1,100);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --ФИО главного бухгалтера
        Buf=Trim(GetFieldS(OWA,1,"ФИОБух"));
        Buf=SubStr(Buf,1,50);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Дата подписания документа
        Buf=DateToString(GetFieldD(OWA,1,"ДатаПодписи"));
        Buf=Trim(Buf);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Должность доверенного лица
        Buf=Trim(GetFieldS(OWA,1,"ДолжнДов"));
        Buf=SubStr(Buf,1,100);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --ФИО доверенного лица
        Buf=Trim(GetFieldS(OWA,1,"ФиоДов"));
        Buf=SubStr(Buf,1,50);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Наименование документа, удостоверяющего личность
        Buf=Trim(GetFieldS(OWA,1,"НаимДокДов"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Номер документа, удостоверяющего личность
        Buf=Trim(GetFieldS(OWA,1,"НомДокДов"));
        Buf=SubStr(Buf,1,20);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Кем выдан документ, удостоверяющий личность
        Buf=Trim(GetFieldS(OWA,1,"ВыданДокДов"));
        Buf=SubStr(Buf,1,255);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Дата выдачи документа, удостоверяющего личность
        Buf=DateToString(GetFieldD(OWA,1,"ДатДокДов"));
        Buf=Trim(Buf);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Сумма заявки
        Buf=Str(GetFieldN(OWA,1,"СумДок"),2);
        TextFileAppendLn(F,Buf);
        TextFileAppendLn(F,"|");
        --Номер
        TextFileAppendLn(F,"|");
         --Дата
        TextFileAppendLn(F,"|");
        --Должность
        TextFileAppendLn(F,"|");
        --Фио
        TextFileAppendLn(F,"|");
        --Телефон
        TextFileWriteLn(F,"|");
        --Роспись по чеку
        bFlagOrder=GetFieldL(OWA,1,"СимволРасшифр"); --
        OA=OpenArray(OWA,1,"Чек","");
         nr=Records(OA);
         for n=1 to nr do
          TextFileAppendLn(F, "ZSCH1|");
          -- Сумма по символу
          Buf=Str(GetFieldN(OA,n,"Сум"),2);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          -- Номер чека
          Buf=SubStr(GetFieldS(OA,n,"Номер"),1,15);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          -- Серия чека
          Buf=SubStr(GetFieldS(OA,n,"Серия"),1,30);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          -- Дата чека
          Buf=DateToString(GetFieldD(OA,1,"Дата"));
          Buf=Trim(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          -- Срок действия чека
          Buf=DateToString(GetFieldD(OA,1,"Срок"));
          Buf=Trim(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          -- Символ кассового плана
          Buf=SubStr(GetFieldS(OA,n,"Символ"),1,2);
          TextFileAppendLn(F,Buf);
          TextFileWriteLn(F,"|");
          if bFlagOrder:
             nr1=РасчетРаздела("Расшифр",OWA,"Символ='"+GetFieldS(OA,n,"Символ")+"'");
             for n1=1 to nr1 do
              -- Роспись
              TextFileAppendLn(F,"ZSCH2|");
              -- Код источника финансирования
              Buf=SubStr(BufИст[n1],1,1);
              TextFileAppendLn(F,Buf);
              TextFileAppendLn(F,"|");
              -- Код БК
              Buf=SubStr(BufКБК[n1],1,20);
              TextFileAppendLn(F,Buf);
              TextFileAppendLn(F,"|");
              -- Тип КБК
              Buf=SubStr(BufТипКБК[n1],1,2);
              TextFileAppendLn(F,Buf);
              TextFileAppendLn(F,"|");
              -- Код цели
              Buf=SubStr(BufДопКЛ[n1],1,20);
              TextFileAppendLn(F,Buf);
              TextFileAppendLn(F,"|");
              -- Сумма по классификации
              Buf=Str(BufСУМ[n1],2);
              TextFileAppendLn(F,Buf);
              TextFileAppendLn(F,"|");
              -- Назначение платежа
              Buf=SubStr(BufНазнПл[n1],1,210);
              TextFileAppendLn(F,Buf);
              TextFileAppendLn(F,"|");
              -- Примечание
              Buf=SubStr(BufПримеч[n1],1,254);
              TextFileAppendLn(F,Buf);
              TextFileWriteLn(F,"|");
             od;
          fi;
        od;
        if not bFlagOrder:
           nr1=РасчетРаздела("Расшифр",OWA,"");
           for n1=1 to nr1 do
             --Роспись
             TextFileAppendLn(F,"ZSCH2|");
             -- Код источника финансирования
             Buf=SubStr(BufИст[n1],1,1);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             -- Код БК
             Buf=SubStr(BufКБК[n1],1,20);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             -- Тип КБК
             Buf=SubStr(BufТипКБК[n1],1,2);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             -- Код цели
             Buf=SubStr(BufДопКл[n1],1,20);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             -- Сумма по классификации
             Buf=Str(BufСум[n1],2);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             -- Назначение платежа
             Buf=SubStr(BufНазнпл[n1],1,210);
             TextFileAppendLn(F,Buf);
             TextFileAppendLn(F,"|");
             -- Примечание
             Buf=SubStr(BufПримеч[n1],1,254);
             TextFileAppendLn(F,Buf);
             TextFileWriteLn(F,"|");
           od;
        fi;
        CloseWorkArea(OA);
        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;
       Finally
        TextFileClose(F);
       end;
       CopyFile(FTmp[Iter],FName[Iter]);
       if not ExistFile(FName[Iter]): Message("Выгрузка прервана",mtError); Exit; fi;
       Msg[Iter]="Заявка успешно выгружена в файл: "+FName[Iter];
       if CanUpdate(SelfCrd):
          BeginChanging(OWA);
          Try
           n=PutFieldI(OWA,1,"НомРейс",НомРейс_);
           n=PutFieldD(OWA,1,"ДатаРейс",ДатаРейс);
           n=PutFieldL(OWA,1,"ВБанк",True);
           EndChanging(OWA);
          Except
           CancelChanging(OWA);
           Raise;
          end;
          НомРейсСлед;
         else
          НомРейс_=НомРейс_+1;
          While НомРейсИспользуется(ДатаРейс,НомРейс_) do
           НомРейс_=НомРейс_+1;
          od;
       fi;
      else
       Msg[Iter]="Файл уже существует. Выгрузка не производилась";
    fi; --if not State=1:
   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]="":
          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[Iter]):
            State=Enquiry("","Файл "+FName[Iter]+" уже существует, перезаписать ?","Нет;Да;Нет для всех;Да для всех;Отмена",mtWarning);
            if State=5: Message("Отказ от создания копии",mtWarning); Exit; fi;
         fi;
         if not State=1 and not State=3:
            CopyFile(FTmp[Iter],FName[Iter]);
         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;
 if not hНомРейс_=НомРейс_:
    Message("Рейс успешно сформирован"+Chr(13)+"Для просмотра сформированных файлов нажмите на поле 'Статус'");
    Template.Field="Msg"; Template.Frame=1;
 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;
 tmp=GetCardFieldS("Контрагент",Rec,"РПО_КБП");
 if not Length(tmp)=5: Message("Длина кода должна быть 5 символов",mtError); ^Cur; fi;
 XXXXX=tmp;
 if not Рекв=Rec: Очистить(0); fi;
 ЗаполнитьРекв(Rec);
 Return Cur;
end;

Proc Перейтинаошибку_OnClick(Row: Integer; Col: Integer; Double: Logical);
 if SumOfArray(Err)=0 then 
   If SumOfArray(Wrng)=0 then Message('Ошибок не обнаружено'); Exit; fi;
   НаПредупр;
 fi;
 НаОшибку;
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);
 ^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,"НОМЕРДОК")+" от "+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);
 if Rec=nil: ^False; fi;
 ЗаполнитьРекв(Rec);
 Очистить(0);
 Return False ;
end;

Proc Отправ_OnExit(FieldName: String; Iter: Integer);
 ЗаполнитьРекв(nil);
 Очистить(0);
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;

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("БАНК_СЧЕТА",Банк,"РПО_ОФК_ИМЯ")+" ("+GetCardFieldS("БАНК_СЧЕТА",Банк,"РПО_Коммент")+")";
 Очистить(0);
 ^False;   
end;

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

Func ВзятьИзЗНЛ_ЛС_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile(SelfCrd,"--Учитывать");
 if not Rec=nil:
    ЗаполнитьРекв(GetCardFieldR(SelfCrd,Rec,"Рекв"));
    Банк=GetCardFieldR(SelfCrd,Rec,"Банк");
    ОтправБанк=GetCardFieldS("БАНК_СЧЕТА",Банк,"РПО_ЛСЧЕТ")+" в "+GetCardFieldS("БАНК_СЧЕТА",Банк,"РПО_ОФК_ИМЯ")+" ("+GetCardFieldS("БАНК_СЧЕТА",Банк,"РПО_Коммент")+")";
    Очистить(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 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;
 if FlagПравила: 
    Message("Установлен флаг формирования имени рейса по правилам, ручной ввод имени не возможен!");
    ^False;
 fi;
 ^True;
end;

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

Func Док_onEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
var tmp:D;
 Rec=UKey[Iter];
 if FieldName="НомДок_": 
    Rec=Раб.Документы.ВыборСФильтром(SelfCrd,"НомерБум","Учитывать");
   |FieldName="ДатаДок_":
    tmp=Calendar;
    if tmp=1.1.100: ^False; fi;
    Rec=OpenCardFile(SelfCrd,"ДатаДок=1.1.100 and ДатаДок="+DateToString(tmp),Rec);
   |True: 
    Rec=OpenCardFile(SelfCrd,"Учитывать",Rec);
 fi;
 if not Rec=nil:
    if ПроверитьУникальность(Rec,Iter):
       ЗагрузитьДок(Iter,"Ukey="+RecordToString(Rec));
       Проверить(Iter,False);
    fi;
 fi;
 Return False;
end;

Proc Док_onExit(FieldName: String; Iter: Integer);
 Очистить(0);
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 ДатаДок_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(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,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 Wrng[Iter]=0: 
    OpenBlank("ДОКУМЕНТЫ.БАНК.ЗАЯВКА_НАЛ",True,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=Раб.вспом.СЭД.ПолучитьПапку("ZS","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 cbГЭК_OnChange(Sender: String);
 Настр(True);
 if fГЭК:
    Проверить(0,False);
   else
    ClearVariable(ГЭК);
    ClearVariable(ГЭК_);
 fi;
 cbГЭК.State=fГЭК;
 Оформление;
end;

Proc OnChange(Sender: String);
 Настр(True);
end;

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

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

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

Proc Загрузить_OnClick(Row: Integer; Col: Integer; Double: Logical);
var F:S;
 if ДК<ДН and not ДК=1.1.100: Message("Начальная дата превышает конечную",mtError); Template.Field="ДН"; Exit; fi;
 if Рекв=nil or Отправ="": Message("Выберите собственные реквизиты",mtError); Template.Field="Отправ"; Exit; fi;
 if Банк=nil or ОтправБанк="": Message("Выберите лицевой счет",mtError); Template.Field="ОтправБанк"; Exit; fi;
 if ИсклВыгруж: F="ДатаРейс=1.1.100 and НомРейс=0"; else F=""; fi;
 if ДН>1.1.100 and ДК>1.1.100: F=Раб.Бюджет2005.Объединить(F,"ДатаДок>="+DateToString(ДН)+" and ДатаДок<="+DateToString(ДК)," and ");
   |ДН=1.1.100 and ДК>1.1.100: F=Раб.Бюджет2005.Объединить(F,"ДатаДок<="+DateToString(ДК)," and ");
   |ДН>1.1.100 and ДК=1.1.100: F=Раб.Бюджет2005.Объединить(F,"ДатаДок>="+DateToString(ДН)," and ");
 fi;
 F=Раб.Бюджет2005.Объединить(F,"Учитывать and Рекв="+RecordToString(Рекв)+" and Банк="+RecordToString(Банк)," and ");
 ЗагрузитьДок(0,F);
 if Ukey[1]=nil:
    Message("По условию документов не найдено",mtWarning);
   else 
    Проверить(0,False);
 fi;
 if not ДатаРейс=1.1.100: НомРейсСлед; fi;
end;

Proc Проверить_OnClick(Row: Integer; Col: Integer; Double: Logical);
var mt:I;
 Проверить(0,False);
 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 Template_onOpen(Create:L);
var Rec: Record;
 Настр(False);
 ДатаРейс=ToDay;
 НомРейсСлед;
 if XXXXX="":
    Rec=Раб.Бюджет2005.НашРекв;
    if not Rec=nil: 
       XXXXX=GetCardFieldS("Контрагент",Rec,"РПО_КБП"); 
       if not Length(XXXXX)=5: XXXXX=""; fi;
       ЗаполнитьРекв(Rec);
    fi;
 fi;
 Инициализация;
end;

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


Конец