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

var Упр:I;

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+НомРейс+".UF"+M,ИмяРейс_);
Путь:S;

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

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

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

var пп[]:i=$;
var НомДок[]:S;
var НомДок_:S="";
var ДатаДок[]:D;
var Контр[]:S;
var НомРеестр[]:S;
var СумДок[]:N;
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 ВсегоСумДок:N=SumOfArray(СумДок,Упр);

Folder:S;

var Buf[]:S;

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

var accept:S;

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

var SelfCrd:S='РПО_УВЕДОМ_УТОЧ_ПЛАТ';
--
--Процедуры и функции -------------
Proc Инициализация;
var i:i;
 accept='';
 for i=32..123 do
  accept=accept+chr(i);
 od;
 accept=accept+chr(125);
 accept=accept+chr(126);
 accept=accept+chr(185);
 accept=accept+chr(184);
 accept=accept+chr(168);

 for i=192..255 do
  accept=accept+chr(i); 
 od;
end;

Func Fix (Value:S):S;
 ^Trim(Value);
end;

Proc Очистить (Iter:I);

 if Iter=0:
    ClearVariable(Упр);
    ClearVariable(НомДок);
    ClearVariable(ДатаДок);
    ClearVariable(Контр);
    ClearVariable(СумДок);
    ClearVariable(НомРеестр);
    ClearVariable(Msg);
    ClearVariable(Err);
    ClearVariable(Wrn);
    ClearVariable(Cmt);
    ClearVariable(Key);
   else
    НомДок[Iter]="";
    ДатаДок[Iter]=1.1.100;
    Контр[Iter]="";
    СумДок[Iter]=0;
    НомРеестр[Iter]="";
    Msg[Iter]="";
    Err[Iter]=0;
    Wrn[Iter]=0;
    Cmt[Iter]=0;
    Key[Iter]=nil;
 fi;
end;

Func ПолучитьФильтр(Iter:I; Rec:Record):S;
var F,tmp:S;
 F="УЧИТЫВАТЬ and ver>=6 and ver<100 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 ЗагрузитьДок (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);
  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,OA,z1,z2,n,i,mt:i;
var tmp,tmp2:S;
var fMsg:L;
var fОсн, fНал:L;
var isLS_FO:L;
 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 Почтовая информация об отправителе файла

      if GetFieldR(OWA,1,"Рекв")=nil:
         ДобавитьСообщение(Iter,"Не выбран получатель",1);
        else
         ПроверкаНаСтандарт(Iter,"УБП(КБП) получателя",GetFieldS(OWA,1,"Рекв.РПО_КБП"),1,5);--
         ПроверкаНаСтандарт(Iter,"Полное наименование УБП(получателя)",GetFieldS(OWA,1,"Рекв.ПолнИмя"),1,-255);--
         ПроверкаНаСтандарт(Iter,"Полное наименование УБП(получателя)",GetFieldS(OWA,1,"Рекв.РПО_ПолнИмя2"),-1,-255);--

      fi; --if GetFieldR(OWA,1,"Учр")=nil:
      isLS_FO=False;
      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);--
         isLS_FO=GetFieldS(OWA,1,"Банк.РПО_ФО_ЛСчет")="";
         ПроверкаНаСтандарт(Iter,"Номер лицевого счета получателя",GetFieldS(OWA,1,"Банк.РПО_ЛСчет"),if(isLS_FO,-1,1),11);--
         ПроверкаНаСтандарт(Iter,"Наименование бюджета",GetFieldS(OWA,1,"Банк.РПО_НАИМБЮДЖ"),1,-512);--
         ПроверкаНаСтандарт(Iter,"Наименование финансового органа",GetFieldS(OWA,1,"Банк.РПО_ФО_НАИМ1"),0,-255);--
         ПроверкаНаСтандарт(Iter,"Наименование финансового органа",GetFieldS(OWA,1,"Банк.РПО_ФО_НАИМ2"),-1,-255);--
         ПроверкаНаСтандарт(Iter,"Номер лицевого счета финансового органа",GetFieldS(OWA,1,"Банк.РПО_ФО_ЛСчет"),-1,11);--
      fi; --if GetFieldR(OWA,1,"Учр_Банк")=nil:

      ПроверкаНаСтандарт(Iter,"Номер уведомления",GetFieldS(OWA,1,"НомерДок"),1,-15);--
      if GetFieldD(OWA,1,"ДатаДок")=1.1.100 then
         ДобавитьСообщение (Iter,"Поле 'Дата уведомления' не заполнено",1);--
      fi;
      ПроверкаНаСтандарт(Iter,"Наименование ГРБС",GetFieldS(OWA,1,"ГРБС"),if(isLS_FO,-1,1),-2000);--
      ПроверкаНаСтандарт(Iter,"Глава по БК",GetFieldS(OWA,1,"Глава"),if(isLS_FO,-1,1),3);--
      ПроверкаНаСтандарт(Iter,"Вид средств",GetFieldS(OWA,1,"Док_Ист"),-1,1);--
      ПроверкаНаСтандарт(Iter,"Номер запроса",GetFieldS(OWA,1,"ЗапросНом"),-1,-15);--
      ПроверкаНаСтандарт(Iter,"Наименование плательщика",GetFieldS(OWA,1,"Плат_БанкИмя"),-1,-160);--
      ПроверкаНаСтандарт(Iter,"ИНН плательщика",GetFieldS(OWA,1,"Плат_ИНН"),-1,-12);
      ПроверкаНаСтандарт(Iter,"КПП плательщика",GetFieldS(OWA,1,"Плат_КПП"),-1,-9);
      ПроверкаНаСтандарт(Iter,"Банковский счет плательщика",GetFieldS(OWA,1,"ПлатБанк_РСчет"),-1,20);--
      ПроверкаНаСтандарт(Iter,"Паспортные данные плательщика",GetFieldS(OWA,1,"Плат_Паспорт"),-1,-255);
      ПроверкаНаСтандарт(Iter,"Должность руководителя",GetFieldS(OWA,1,"ДолжнРук"),-1,-100);
      ПроверкаНаСтандарт(Iter,"ФИО руководителя",GetFieldS(OWA,1,"ФИОРук"),1,-50);
      ПроверкаНаСтандарт(Iter,"Должность ответственного исполнителя",GetFieldS(OWA,1,"ДолжнИсп"),1,-100);
      ПроверкаНаСтандарт(Iter,"ФИО ответственного исполнителя",GetFieldS(OWA,1,"ФИОИсп"),1,-50);
      ПроверкаНаСтандарт(Iter,"Телефон ответственного исполнителя",GetFieldS(OWA,1,"ТелИсп"),1,-50);
      --Дата подписания заявки
      if GetFieldD(OWA,1,"ДатаПодписи")=1.1.100 then
         ДобавитьСообщение (Iter,"Поле 'Дата подписания уведомления' не заполнено",1);
      fi;
      OA=OpenArray(OWA,1,'ДОК_ИСХ','');
      try
      for i=1 to  Records(OA) do
        ПроверкаНаСтандарт(Iter,"Код уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ТИП"),-1,2);
        ПроверкаНаСтандарт(Iter,"Наименование уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"НАИМ"),-1,-160);
        ПроверкаНаСтандарт(Iter,"Номер уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"НОМ"),-1,-15);
--        if GetFieldD(OA,i,"ДАТ")=1.1.100 then
--           ДобавитьСообщение (Iter,"Поле 'Дата уточняемого документа' (строка"+Str(GetFieldI(OA,i,"N"))+") не заполнено",1);--
--        fi;
        ПроверкаНаСтандарт(Iter,"Наименование получателя",GetFieldS(OA,i,"БанкИмя"),-1,-160);--
        ПроверкаНаСтандарт(Iter,"ИНН получателя(строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ИНН"),-1,-12);
        ПроверкаНаСтандарт(Iter,"КПП получателя(строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"КПП"),-1,-9);
        ПроверкаНаСтандарт(Iter,"Код по ОКАТО уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ОКАТО"),-1,11);
        ПроверкаНаСтандарт(Iter,"Код по КБК уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"КБК"),if(GetFieldS(OWA,1,"Док_Ист")="5",-1,1),20);
        ПроверкаНаСтандарт(Iter,"Тип КБК уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ТипКБК"),if(GetFieldS(OA,i,"КБК")="",-1,1),2);
        ПроверкаНаСтандарт(Iter,"Код цели субсидии/субвенции уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ДопКл"),-1,-20);
        if GetFieldN(OA,i,"Сум")=0 then
           ДобавитьСообщение (Iter,"Поле 'Сумма уточняемого документа' (строка"+Str(GetFieldI(OA,i,"N"))+") не заполнено",1);
        fi;
        ПроверкаНаСтандарт(Iter,"Назначение платежа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"НАЗНПЛ"),-1,-210);
        ПроверкаНаСтандарт(Iter,"Номер заявки на кассовый расход (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ЗАЯВ_КР_НОМ"),-1,-15);
--        if GetFieldD(OA,i,"ЗАЯВ_КР_ДАТ")=1.1.100 then
--           ДобавитьСообщение (Iter,"Поле 'Дата заявки на кассовый расход' (строка"+Str(GetFieldI(OA,i,"N"))+") не заполнено",1);--
--        fi;
        ПроверкаНаСтандарт(Iter,"Примечание (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ПРИМЕЧ"),-1,-254);
      od;
      finally
        CloseWorkArea(OA);
      end;
      OA=OpenArray(OWA,1,'ДОК_ИЗМ','');
      try
      for i=1 to  Records(OA) do
       ПроверкаНаСтандарт(Iter,"Наименование получателя для банка(строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"БанкИмя"),-1,-160);--
       ПроверкаНаСтандарт(Iter,"ИНН получателя (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ИНН"),-1,-12);
       ПроверкаНаСтандарт(Iter,"КПП получателя (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"КПП"),-1,-9);
       ПроверкаНаСтандарт(Iter,"Код по ОКАТО уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ОКАТО"),-1,11);
       ПроверкаНаСтандарт(Iter,"Лицевой счет получателя",GetFieldS(OA,i,"ЛСЧЕТ"),-1,11);--
       ПроверкаНаСтандарт(Iter,"Код по КБК уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"КБК"),if(GetFieldS(OWA,1,"Док_Ист")="5" or GetFieldS(OWA,1,"Док_Ист")="",-1,1),20);
       ПроверкаНаСтандарт(Iter,"Тип КБК уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ТИПКБК"),if(GetFieldS(OA,i,"КБК")="",-1,1),2);
       ПроверкаНаСтандарт(Iter,"Код цели субсидии/субвенции уточняемого документа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"ДопКл"),-1,-20);
       ПроверкаНаСтандарт(Iter,"Назначение платежа (строка"+Str(GetFieldI(OA,i,"N"))+")",GetFieldS(OA,i,"НАЗНПЛ"),-1,-210);
       ПроверкаНаСтандарт(Iter,"Вид средств",GetFieldS(OA,i,"Ист"),-1,1);--!!! 1|3=>1|3; 2|4 =>2|4
      od;
      finally
        CloseWorkArea(OA);
      end;
   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,nr: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;

var BufСум[]:N;
var BufСумРуб[]:N;
var Buf[]:S;
var BufИСТ[]:S;
var BufТИПКБК[]:S;
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):I;
var Iter,nn,z,OA:I;
var Ист,ТипКБК,КБК,ТипКБКП,КБКП,НазнПл,ДопКл,ДопКлП,Примеч:S;
var Сум,СумРуб:N;
 ClearVariable(Buf);
 ClearVariable(BufИСТ);
 ClearVariable(BufКБК);
 ClearVariable(BufТипКБК);
 ClearVariable(BufДопКл);
 ClearVariable(BufКБКП);
 ClearVariable(BufТипКБКП);
 ClearVariable(BufДопКлП);
 ClearVariable(BufСум);
 ClearVariable(BufСумРуб);
 ClearVariable(BufНазнПл);
 ClearVariable(BufПримеч);

  OA=OpenArray(OWA,1,aHandle,"");
  try
  for nn=1..Records(OA) do
      ИСТ=GetFieldS(OA,nn,"ИСТ");
      ТипКБК=GetFieldS(OA,nn,"ТИПКБК");
      КБК=GetFieldS(OA,nn,"КБК");
      ДопКл=GetFieldS(OA,nn,"ДопКл");
      ТипКБКП=GetFieldS(OA,nn,"ТИПКБКП");
      КБКП=GetFieldS(OA,nn,"КБКП");
      ДопКлП=GetFieldS(OA,nn,"ДопКлП");
      НазнПл=GetFieldS(OA,nn,"НазнПл");
      Сум=GetFieldN(OA,nn,"СУМ");
      СумРуб=GetFieldN(OA,nn,"СУМРуб");
      Примеч=GetFieldS(OA,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,ДопКл);
         InsertInArray(BufДопКлП,z,ДопКлП);
         InsertInArray(BufСум,z,Сум);
         InsertInArray(BufСумРуб,z,СумРуб);
         InsertInArray(BufПримеч,z,Примеч);
        else
         BufСум[z]=BufСум[z]+Сум;         
         BufСумРуб[z]=BufСумРуб[z]+СумРуб;
         BufПримеч[z]=BufПримеч[z]+Примеч;
      fi;
  od;
  finally
    CloseWorkArea(OA);
  end;
 ^LengthOfArray(Buf);
end;


Proc ВыгрузитьРейс;
var OWA,OA,State,Iter,F,n,У1,i1,n1,n2,nn,nr,i,hНомРейс:I;
var Buf,Cache,tmp:S;
var 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,"|");
        if flagОтдРейс then
           n1=i1; n2=i1;
          else
           n1=1; n2=Упр;
        fi;
        for Iter=n1..n2 do
          ProgressPos(Iter);
          Msg[Iter]="ОШИБКА ВЫГРУЗКИ";
          SetFilter(OWA,"UKey="+RecordToString(Key[Iter]));
          --UF Общая информация
          TextFileAppendLn(F,"UF|");
          --Глобальный идентификатор уведомления
          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=GetFieldS(OWA,1,"Рекв.ПолнИмя");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          Buf=GetFieldS(OWA,1,"Рекв.РПО_ПолнИмя2");
          Buf=Fix(Buf);
          TextFileAppendLn(F,Buf);
          TextFileAppendLn(F,"|");
          --Код клиента
          if GetFieldS(OWA,1,"Банк.РПО_КодБюдж")="1":
             Buf=GetFieldS(OWA,1,"Рекв.РПО_КБП");
             Buf=Fix(Buf);
            else
             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);
          TextFileAppendLn(F,"|");
          --Наименование бюджета
          Buf=GetFieldS(OWA,1,"Банк.РПО_НАИМБЮДЖ");
          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,"Банк.РПО_ФО_ЛСчет");
          if Fix(GetFieldS(OWA,1,"Банк.РПО_ЛСчет"))<>"" then Buf=""; else  Buf=Fix(Buf); fi;
          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,"|");
          --Код ОФК
          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=Trim(DateToString(GetFieldD(OWA,1,"ЗАПРОСДАТ")));
          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,"ПлатБанк_РСчет");
          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=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,"|");
          --Телефон ответственного исполнителя
          TextFileAppendLn(F,"|");
          --Дата отметки
          TextFileWriteLn(F,"|");
          ------Отметка офк о постановке на учет
          OA=OpenArray(OWA,1,"ДОК_ИСХ","N");
          nr=Records(OA);
          try
          for i=1 to nr do
            --UFPP Строки заявки на кассовый расход
            TextFileAppendLn(F,"UFPP|");
            --Номер Записи
            Buf=Str(GetFieldI(OA,i,"N"));
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Guid
            Buf=GetFieldS(OA,i,"ФК_GUID");
            Buf=Fix(Buf);
            if Buf<>"": TextFileAppendLn(F,Buf); fi;
            TextFileAppendLn(F,"|");
            --Код платежного документа
            Buf=GetFieldS(OA,i,"ТИП");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Наименование платежного документа
            Buf=GetFieldS(OA,i,"НАИМ");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Номер платежного документа
            Buf=GetFieldS(OA,i,"НОМ");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Дата платежного документа
            Buf=DateToString(GetFieldD(OA,i,"ДАТ"));
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Наименование получателя
            Buf=GetFieldS(OA,i,"БанкИмя");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --ИНН получателя
            Buf=GetFieldS(OA,i,"ИНН");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --КПП получателя
            Buf=GetFieldS(OA,i,"КПП");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Код по ОКАТО
            Buf=GetFieldS(OA,i,"ОКАТО");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Код по КБК
            if GetFieldS(OWA,1,"Док_Ист")="5":
               Buf="";
              else
               Buf=GetFieldS(OA,i,"КБК");
               Buf=Fix(Buf);
            fi;
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Тип КБК
            if GetFieldS(OWA,1,"Док_Ист")="5":
               Buf="";
              else
               Buf=GetFieldS(OA,i,"ТИПКБК");
               Buf=Fix(Buf);
            fi;
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Код цели
            Buf=GetFieldS(OA,i,"ДОПКЛ");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма
            Buf=Str(GetFieldN(OA,i,"СУМ"),2);
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Назначение платежа
            Buf=GetFieldS(OA,i,"НАЗНПЛ");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Номер заявки на кассовый расход
            Buf=GetFieldS(OA,i,"ЗАЯВ_КР_НОМ");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Дата заявки на кассовый расход
            Buf=DateToString(GetFieldD(OA,i,"ЗАЯВ_КР_ДАТ"));
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Примечание
            Buf=GetFieldS(OA,i,"ПРИМЕЧ");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileWriteLn(F,"|");
          od;
          Finally
          CloseWorkArea(OA);
          end;
          OA=OpenArray(OWA,1,"ДОК_ИЗМ","N");
          nr=Records(OA);
          try
          for i=1 to nr do
            --UFPP Строки заявки на кассовый расход
            TextFileAppendLn(F,"UFPP_N|");
            --Номер Записи
            Buf=Str(GetFieldI(OA,i,"N"));
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Наименование получателя
            Buf=GetFieldS(OA,i,"БанкИмя");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --ИНН получателя
            Buf=GetFieldS(OA,i,"ИНН");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --КПП получателя
            Buf=GetFieldS(OA,i,"КПП");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Код по ОКАТО
            Buf=GetFieldS(OA,i,"ОКАТО");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Лицевой счет получателя
            Buf=GetFieldS(OA,i,"ЛСЧЕТ");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Код по КБК
            if GetFieldS(OA,i,"Ист")="5":
               Buf="";
              else
               Buf=GetFieldS(OA,i,"КБК");
               Buf=Fix(Buf);
            fi;
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Тип КБК
            if GetFieldS(OA,i,"Ист")="5":
               Buf="";
              else
               Buf=GetFieldS(OA,i,"ТИПКБК");
               Buf=Fix(Buf);
            fi;
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Код цели
            Buf=GetFieldS(OA,i,"ДОПКЛ");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Сумма
            if GetFieldN(OA,i,"СУМ")=0 then
               Buf="";
              else
               Buf=Str(GetFieldN(OA,i,"СУМ"),2);
            fi;
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Назначение платежа
            Buf=GetFieldS(OA,i,"НАЗНПЛ");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileAppendLn(F,"|");
            --Вид средств
            Buf=GetFieldS(OA,i,"Ист");
            Buf=Fix(Buf);
            TextFileAppendLn(F,Buf);
            TextFileWriteLn(F,"|");
          od;
          Finally
          CloseWorkArea(OA);
          end;
        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 CanUpdate(SelfCrd):
          BeginChanging(OWA,True);
          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:
  Finally
   CloseWorkArea(OWA);
   CloseProgress;
  end;
  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;
 Finally
  for Iter=1..Упр do
   if ExistFile(FTmp[Iter]): DeleteFile(FTmp[Iter]); FTmp[Iter]=""; 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;

Proc УчрНаим_OnExit(FieldName: String; Iter: Integer);
  Очистить(0);
end;

Func ВзятьИзЗВЗ_Учр_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile(SelfCrd,"--Учитывать and ver <100");
 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;
var OWA:I;
 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 Msg_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if not Key[Iter]=nil:
    if Match(Msg[Iter],"Уведомление успешно выгружена в файл:*"):
       ExecuteProgram("NotePad '"+FName[Iter]+"'");
      else
       OpenBlank("Документы.Банк.УВЕДОМ_УТОЧ_ПЛАТ",True,Key[Iter]);
       Проверить(Iter,False);
    fi;
 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=Раб.вспом.СЭД.ПолучитьПапку("UF","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 Template_onOpen(Create:L);
var Rec: Record;
 Инициализация;
 ДатаРейс=ToDay;
 НомРейсСлед;
 if XXXXX="" or Учр=nil:
    Rec=Раб.Бюджет2005.НашРекв;
    ЗаполнитьЗаказчика(Rec);
 fi;
end;

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




Конец
