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

var Упр:I;

btnОпись :Object;
cbОтдРейс:Object;

Путь:String;

FlagЛВС  :L;
FlagПравила:L=[True];
FlagОтдРейс:L;

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+НомРейс+".PP"+M,ИмяРейс_);

var ДН:D=[ToDay];
var ДК:D=[ToDay];
Рекв:Record;
Банк:Record;
FlagВБанк:L;
Отправ:S;
ОтправБанк:S;

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

var пп[]:i=$;
var НомДок[]:S;
var НомДок_:S="";
var ДатаДок[]:D;
var ДатаДок_:D=1.1.100;
var СумДок[]:N;
var ПолучДок[]:S;
var НазнДок[]:S;
var FNam[]:S;
var Msg[]:S;
var Msg_:S="";
var Wrng[]:I;
var Err[]:I;
var WrngT[]:S;
var ErrT[]:S;
var UKey[]:S;

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

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

var accept:String;

Folder:S;

var SelfCrd:S="ПОРУЧ";

var Buf[]:S;
var Buf2[]:S;
--
--Процедуры и функции -------------
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);
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"));
 ^Раб.Формат.ReplaceSubstr(Mystring,"№","N");
end;

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

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

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

if res<>'' then res=res+'.'; fi;
^Res;

end;

Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(НомДок);
 ClearVariable(ДатаДок);
 ClearVariable(СумДок);
 ClearVariable(ПолучДок);
 ClearVariable(НазнДок);
 ClearVariable(Msg);
 ClearVariable(Wrng);
 ClearVariable(Err);
 ClearVariable(UKey);
end;

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

Func Проверить(Iter:I; Full:L):L;
var OWA,OA,n,nr,n2,nr2,z1,z2,i:i;
var Sum1,Sum2:N;
var tmp:S;
var ППП,ФКР,КЦСР,КВР,ЭКР,ВНФ,ВФ,КД:S;
var БК:I;
 if Iter=0: 
    УдалитьПустыеСтроки; 
    if Ukey[1]="": 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("ПОРУЧ","","1=0");
 if z2-z1>0: ShowProgress(z2-z1,"Проверка...."); fi;
 Try
  for n=z1..z2 do
   ProgressPos(n);
   SetFilter(OWA,"UKey="+UKey[n]);
   if Records(OWA)>0:
      if SearchInArray(Ukey,Ukey[n],False,n+1)>0 then AddMsg("Строка дублирует строку№"+Str(SearchInArray(Ukey,Ukey[n],False,n+1)),n,True); fi;
      if GetFieldL(OWA,1,"РПО_Учитывать")=False: AddMsg("Флаг 'Учитывать' в платежном поручении не установлен",n,True); fi;
      if GetFieldR(OWA,1,"РЕКВ")=Nil: AddMsg("Не указан плательщик",n,True); fi;
      if GetFieldR(OWA,1,"РЕКВП")=Nil: AddMsg("Не указан получатель",n,True); fi;
      if GetFieldR(OWA,1,"БАНК")=Nil: AddMsg("Не указан расчетный счет плательщика",n,True); fi;
      if GetFieldR(OWA,1,"БАНКП")=Nil: AddMsg("Не указан расчетный счет получателя",n,True); fi;

      -- Проверка на стандарт.
      --Номер платежного поручения
      tmp=ПроверкаНаСтандарт(1,-10,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;
      --Инн Плательщика
      tmp=ПроверкаНаСтандарт(1,-12,GetFieldS(OWA,1,"РЕКВ.ИНН"),"ИНН Плательщика",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Кпп Плательщика
      tmp=ПроверкаНаСтандарт(1,9,GetFieldS(OWA,1,"РЕКВ.КПП"),"КПП Плательщика",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Код бюджетополучателя
      tmp=ПроверкаНаСтандарт(0,5,GetFieldS(OWA,1,"РЕКВ.РПО_КБП"),"Код бюджетополучателя - Плательщика",n);
      if tmp<>"" : AddMsg(tmp,n,True);	fi;
      --Полное наименование бюджетополучателя - Плательщика
      tmp=ПроверкаНаСтандарт(0,-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;
      --Наименование Плательщика - по требованию банка
      tmp=ПроверкаНаСтандарт(1,-160,GetFieldS(OWA,1,"БАНК.БанкИмя"),"Наименование Плательщика - по требованию банка",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Лицевой счет Плательщика
      tmp=ПроверкаНаСтандарт(1,11,GetFieldS(OWA,1,"БАНК.РПО_ЛСЧЕТ"),"Лицевой счет Плательщика",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Код ТОФК
      tmp=ПроверкаНаСтандарт(1,4,GetFieldS(OWA,1,"БАНК.РПО_ОФК_КОД"),"Код ТОФК",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --ИНН органа ФК - Плательщика
      tmp=ПроверкаНаСтандарт(-1,-12,GetFieldS(OWA,1,"БАНК.РПО_БАНК_ИНН"),"ИНН органа ФК - Плательщика",n);
      if tmp<>"" : AddMsg(tmp,n,True);	fi;
      --Наименование органа ФК - Плательщика
      tmp=ПроверкаНаСтандарт(0,-250,GetFieldS(OWA,1,"БАНК.РПО_ОФК_ИМЯ"),"Наименование органа ФК - Плательщика",n);
      if tmp<>"" : AddMsg(tmp,n,True);	fi;
      --Расчетный счет органа ФК Плательщика
      tmp=ПроверкаНаСтандарт(1,20,GetFieldS(OWA,1,"БАНК.РСЧЕТ"),"Расчетный счет органа ФК Плательщика",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --БИК банка Плательщика
      tmp=ПроверкаНаСтандарт(1,9,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,"БАНК.БАНК"),"Наименование банка Плательщика",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      if Length(GetFieldS(OWA,1,"БАНК.ГОРОД")+GetFieldS(OWA,1,"БАНК.БАНК"))>160 then AddMsg('Поле "Наименование банка Плательщика" превышает максимальную длину(160)',n,True); fi;
      --Наименование филиала банка Плательщика
      tmp=ПроверкаНаСтандарт(-1,-50,GetFieldS(OWA,1,"БАНК.РПО_ФИЛИАЛ"),"Наименование филиала банка Плательщика",n);
      if tmp<>"" : AddMsg(tmp,n,True);	fi;
      --Коррсчет банка Плательщика в РКЦ
      tmp=ПроверкаНаСтандарт(-1,20,GetFieldS(OWA,1,"БАНК.КСЧЕТ"),"Коррсчет банка Плательщика в РКЦ",n);
      if tmp<>"" : AddMsg(tmp,n,True);	fi;
      --ИНН Получателя
      tmp=ПроверкаНаСтандарт(0,-12,GetFieldS(OWA,1,"РЕКВП.ИНН"),"ИНН Получателя",n);
      if tmp<>"" : AddMsg(tmp,n,True);	fi;
      --КПП Получателя
      tmp=ПроверкаНаСтандарт(0,9,GetFieldS(OWA,1,"РЕКВП.КПП"),"КПП Получателя",n);
      if tmp<>"" : AddMsg(tmp,n,True);	fi;
      --Наименование Получателя  - по требованию банка
      tmp=ПроверкаНаСтандарт(1,-160,GetFieldS(OWA,1,"БАНКП.БанкИмя"),"Наименование Получателя  - по требованию банка",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --ИНН органа ФК - Получателя
      tmp=ПроверкаНаСтандарт(-1,-12,GetFieldS(OWA,1,"БАНКП.РПО_БАНК_ИНН"),"ИНН органа ФК - Получателя",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Наименование органа ФК - Получателя
      tmp=ПроверкаНаСтандарт(-1,-250,GetFieldS(OWA,1,"БАНКП.РПО_ОФК_ИМЯ"),"Наименование органа ФК - Получателя",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Расчетный счет Получателя
      tmp=ПроверкаНаСтандарт(0,20,GetFieldS(OWA,1,"БАНКП.РСЧЕТ"),"Расчетный счет Получателя",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Лицевой счет Получателя
      tmp=ПроверкаНаСтандарт(-1,11,GetFieldS(OWA,1,"БАНКП.РПО_ЛСЧЕТ"),"Лицевой счет Получателя",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --БИК банка Получателя
      tmp=ПроверкаНаСтандарт(1,9,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,"БАНКП.БАНК"),"Наименование банка Получателя",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      if Length(GetFieldS(OWA,1,"БАНКП.ГОРОД")+GetFieldS(OWA,1,"БАНКП.БАНК"))>160 then AddMsg('Поле "Наименование банка Получателя" превышает максимальную длину(160)',n,True); fi;
      --Наименование филиала банка Получателя
      tmp=ПроверкаНаСтандарт(-1,-50,GetFieldS(OWA,1,"БАНКП.РПО_ФИЛИАЛ"),"Наименование филиала банка Получателя",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Коррсчет банка Получателя в РКЦ
      tmp=ПроверкаНаСтандарт(-1,20,GetFieldS(OWA,1,"БАНКП.КСЧЕТ"),"Коррсчет банка Получателя в РКЦ",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Срок платежа
      --Очередность платежа
      tmp=ПроверкаНаСтандарт(1,1,if(Pos("0",GetFieldS(OWA,1,"ДАТАО"))=1,SubStr(GetFieldS(OWA,1,"ДАТАО"),2,255),GetFieldS(OWA,1,"ДАТАО")),"Очередность платежа",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Назначение платежа
      tmp=ПроверкаНаСтандарт(1,-210,GetFieldS(OWA,1,"РПО_НАЗНПЛАТ"),"Назначение платежа",n);
      if tmp<>"" : AddMsg(tmp,n,True);	 fi;
      --Признак печати КПП
      if GetFieldL(OWA,1,"БЮДЖЕТ"):
	 --Статус юридического лица (101)
	 tmp=ПроверкаНаСтандарт(0,2,GetFieldS(OWA,1,"П1"),"Статус юридического лица",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 --Код бюджетной классификации (104)
	 tmp=ПроверкаНаСтандарт(0,20,GetFieldS(OWA,1,"П2"),"Код бюджетной классификации",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 tmp=ПроверкаНаСтандарт(0,11,GetFieldS(OWA,1,"П3"),"Код ОКАТО (105)",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 tmp=ПроверкаНаСтандарт(0,-2,GetFieldS(OWA,1,"П4"),"Показатель основания платежа (106)",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 tmp=ПроверкаНаСтандарт(0,-10,GetFieldS(OWA,1,"П5"),"Показатель налогового периода (107)",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 tmp=ПроверкаНаСтандарт(0,-15,GetFieldS(OWA,1,"П6"),"Показатель номера документа (108)",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 tmp=ПроверкаНаСтандарт(0,-10,GetFieldS(OWA,1,"П7"),"Показатель даты документа (109)",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 tmp=ПроверкаНаСтандарт(0,-2,GetFieldS(OWA,1,"П8"),"Тип платежа (110)",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
       else
	 --Код бюджетной классификации (104)
	 tmp=ПроверкаНаСтандарт(-1,20,GetFieldS(OWA,1,"П2"),"Код бюджетной классификации",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 --Код ОКАТО (105)
	 tmp=ПроверкаНаСтандарт(-1,11,GetFieldS(OWA,1,"П3"),"Код ОКАТО (105)",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 --Показатель номера документа (108)
	 tmp=ПроверкаНаСтандарт(-1,-15,GetFieldS(OWA,1,"П6"),"Показатель номера документа (108)",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
	 --Показатель даты документа (109)
	 tmp=ПроверкаНаСтандарт(-1,-10,GetFieldS(OWA,1,"П7"),"Показатель даты документа (109)",n);
	 if tmp<>"" : AddMsg(tmp,n,True);   fi;
      fi;

      OA=OpenArray(OWA,1,"РПО_СТРОКИ_БК","");
      try
      Nr2=Records(OA);
	if Nr2>0:
	   Sum2=0;
	   for n2=1..nr2 do
	     Sum2=Sum2+GetFieldN(OA,n2,"СУМ");
	     ППП=GetFieldS(OA,1,"КОДГЛАВЫ");
	     ФКР=GetFieldS(OA,1,"КОДПРД");
	     КЦСР=GetFieldS(OA,1,"КОДЦСТ");
	     КВР=GetFieldS(OA,1,"КОДВР");
	     ЭКР=GetFieldS(OA,1,"КОДЭК");
	     ВНФ=GetFieldS(OA,1,"КОДКИВнФ");
	     ВФ=GetFieldS(OA,1,"КОДКИВФ");
	     КД=GetFieldS(OA,1,"КОДКД");
	     БК=0;

	     if Match(GetFieldS(OWA,1,"БАНК.РСЧЕТ"),'40302*') then
		if ППП<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Код главы' не заполняется(строка"+Str(n2)+")",n,True); fi;
		if ФКР<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Код подраздела' не заполняется(строка"+Str(n2)+")",n,True); fi;
		if КЦСР<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Код целевой статьи' не заполняется(строка"+Str(n2)+")",n,True); fi;
		if КВР<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Код вида расходов' не заполняется(строка"+Str(n2)+")",n,True); fi;
		if ЭКР<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Код по ЭКР' не заполняется(строка"+Str(n2)+")",n,True); fi;
		if ВНФ<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Код КИВнФ (внешн. фин.)' не заполняется(строка"+Str(n2)+")",n,True); fi;
		if ВФ<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Код КИВФ (внутр. фин.)' не заполняется(строка"+Str(n2)+")",n,True); fi;
		if КД<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Код доходов' не заполняется(строка"+Str(n2)+")",n,True); fi;
--		  if GetFieldS(OA,1,"НОМБО")<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Номер бюджетного обязательства' не заполняется",n,True); fi;
--		  if GetFieldS(OA,1,"МЕСФИН")<>'' then AddMsg("При расходе по балансовому счету 40302 поле 'Месяц финансирования",n,True); fi;
	       else
		if (ППП<>'' or ФКР<>'' or КЦСР<>'' or КВР<>'' or ЭКР<>'') then
		   tmp=ПроверкаНаСтандарт(1,3,ППП,'Код главы(строка'+Str(n2)+')',n);
		   if tmp<>"" : AddMsg(tmp,n,True);   fi;
		   tmp=ПроверкаНаСтандарт(1,4,ФКР,'Код подраздела(строка'+Str(n2)+')',n);
		   if tmp<>"" : AddMsg(tmp,n,True);   fi;
		   tmp=ПроверкаНаСтандарт(1,7,КЦСР,'Код целевой статьи(строка'+Str(n2)+')',n);
		   if tmp<>"" : AddMsg(tmp,n,True);   fi;
		   tmp=ПроверкаНаСтандарт(1,3,КВР,'Код вида расходов(строка'+Str(n2)+')',n);
		   if tmp<>"" : AddMsg(tmp,n,True);   fi;
		   tmp=ПроверкаНаСтандарт(1,3,ЭКР,'Код по ЭКР(строка'+Str(n2)+')',n) ;
		   if tmp<>"" : AddMsg(tmp,n,True);   fi;
		   if Match(GetFieldS(OWA,1,"БАНК.РСЧЕТ"),'40503*') then 
		     if ФКР<>'0000'  then   AddMsg('Для счета 4503 код подраздела заполняется нулями(строка'+Str(n2)+')',n,True); fi;
		     if КЦСР<>'0000000' then   AddMsg('Для счета 4503 код целевой статьи заполняется нулями(строка'+Str(n2)+')',n,True); fi;
		     if КВР<>'000' then   AddMsg('Для счета 4503 код вида расходов заполняется нулями(строка'+Str(n2)+')',n,True); fi;
		   fi;
		   БК=БК+1;
		fi;
		if ВНФ<>'' then
		   tmp=ПроверкаНаСтандарт(-1,20,ВНФ,'Код КИВнФ(строка'+Str(n2)+')',n);
		   if tmp<>"" : AddMsg(tmp,n,True);   fi;
		   БК=БК+1;
		fi;
		if ВФ<>'' then
		   tmp=ПроверкаНаСтандарт(-1,20,ВФ,'Код КИВФ(строка'+Str(n2)+')',n);
		   if tmp<>"" : AddMsg(tmp,n,True);   fi;
		   БК=БК+1;
		fi;
		if КД<>'' then
		   tmp=ПроверкаНаСтандарт(-1,20,КД,'Код доходов(строка'+Str(n2)+')',n);
		   if tmp<>"" : AddMsg(tmp,n,True);   fi;
		   БК=БК+1;
		fi;

		if БК=0: AddMsg('Заполните детализацию платежного поручения по бюджетной классификации(строка'+Str(n2)+')',n,True);
		  |БК>1: AddMsg('Более одной бюджетной классификации(строка'+Str(n2)+')',n,True);
		fi;
	     fi;

	     tmp=ПроверкаНаСтандарт(-1,3,GetFieldS(OA,1,"КОДЦП"),'Код целевой программы(строка'+Str(n2)+')',n);
	     if tmp<>"" : AddMsg(tmp,n,True);	fi;
--	       tmp=ПроверкаНаСтандарт(-1,-10,GetFieldS(OA,1,"НОМБО"),'Номер бюджетного обязательства(строка'+Str(n2)+')',n);
--	       if tmp<>"" : AddMsg(tmp,n,True);   fi;
--	       tmp=ПроверкаНаСтандарт(-1,2,GetFieldS(OA,1,"МЕСФИН"),'Месяц финансирования(строка'+Str(n2)+')',n);
--	       if tmp<>"" : AddMsg(tmp,n,True);   fi;
	     --Сумма по классификации
	     tmp=ПроверкаНаСтандарт(-1,-40,GetFieldS(OA,1,"ХФП"),'Резервное поле(строка'+Str(n2)+')',n);
	     if tmp<>"" : AddMsg(tmp,n,True);	fi;
	   od;
	   Sum2=Round(Sum2,2);
	   if Round(GetFieldN(OWA,1,"СУММА"),2)<>Sum2: AddMsg("Сумма по строкам бюджетной классификации не совпадает с суммой платежного поручения",n,True); fi;
	  else
	    AddMsg("Отсутствует рашифровка суммы по строкам бюджетной классификации",n,False);
	fi;
      finally
      CloseWorkArea(OA);
      end;
      if (GetFieldI(OWA,1,"РПО_НомРейс")<>0 and GetFieldD(OWA,1,"РПО_ДатаРейс")<>1.1.100) and not((GetFieldI(OWA,1,"РПО_НомРейс")=НомРейс_) and (GetFieldD(OWA,1,"РПО_ДатаРейс")=ДатаРейс)) :
	 Msg[n]=Msg[n]+if(Msg[n]='','',Chr(13))+ "Плат. поруч. уже выгружалось рейсом №"+Str(GetFieldI(OWA,1,"РПО_НомРейс"))+" от "+DateToString(GetFieldD(OWA,1,"РПО_ДатаРейс"));
      fi;
    else
      AddMsg("Платежное поручение не найдено",n,True);
   fi;
      if Msg[n]='': Msg[n]="Проверка пройдена"; fi;
  od;

 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 ^True;
end;

Proc НомРейсСлед;
var OWA,nr:I;
 if ДатаРейс=1.1.100: Message("Введите дату формирования документов (файла)",mtError); Template.Field="ДатаРейс"; Exit; fi;
 OWA=OpenWorkArea(SelfCrd,"РПО_НомРейс","РПО_ДатаРейс>="+DateToString(ДатаРейс)+" and РПО_ДатаРейс<="+DateToString(ДатаРейс));
 Try
  Nr=Records(OWA);
  if Nr=0: 
     НомРейс_=1;
    else
     НомРейс_=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,nr: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);
var OWA,n,nr:I;
var Rec :Record;
 Очистить;
 OWA=OpenWorkArea(SelfCrd,"","РПО_НомРейс="+Str(НР)+" and РПО_ДатаРейс>="+DateToString(ДР)+" and РПО_ДатаРейс<="+DateToString(ДР));
 FlagВБанк=False;
 Рекв=nil; Отправ=""; Банк=nil; ОтправБанк="";
 Try
  Nr=Records(OWA);
  for n=1..Nr do
   InsertFrame(Упр,Упр+1);
   НомДок[Упр]=GetFieldS(OWA,n,"НОМЕРБУМ");
   ДатаДок[Упр]=GetFieldD(OWA,n,"ДАТА");
   if n=1 then
      ДН=GetFieldD(OWA,n,"ДАТА");
      ДК=GetFieldD(OWA,n,"ДАТА");
   fi;
   if ДатаДок[Упр] < ДН then ДН = GetFieldD(OWA,n,"ДАТА"); fi;
   if ДатаДок[Упр] > ДК then ДК = GetFieldD(OWA,n,"ДАТА"); fi;
   СумДок[Упр]=GetFieldN(OWA,n,"СУММА");
   НазнДок[Упр]=GetFieldS(OWA,n,"РПО_НАЗНПЛАТ");
   UKey[Упр]=RecordToString(GetRecordKey(OWA,n));
   Rec=GetFieldR(OWA,n,"БАНКП");
   if Rec<>nil: ПолучДок[Упр]=GetCardFieldS("БАНК_СЧЕТА",Rec,"БАНКИМЯ"); fi;
  od;
 Finally
  CloseWorkArea(OWA);
 end;
 Проверить(0,False);
 btnОпись.Enabled=True;
end;

Proc ВыгрузитьРейс;
var OWAПП,OAПП,F,n,У1,i1,n1,n2,nn,nr,hНомРейс_:I;
var Buf,Cache,FName:S;
var Бюджет,Flag,FlagCreate:L;
 if flagОтдРейс then У1=Упр; else У1=1; fi;
 for i1=1..У1 do
 if flagОтдРейс then ShowProgress(Упр,"Формирование рейса...."); fi;
 Try
  if i1>1 then НомРейс_=НомРейс_+1; fi;
  FlagCreate=False;
  F=TextFileCreate(Folder+ИмяРейс);
  FlagCreate=True;
  TextFileWriteLn(F,"FK|2008.06|Турбо Бухгалтер 6.9 Бюджет-148н|"+SubStr(Str(Версия.Сборка0)+if(Версия.Сборка1<>0,"."+Str(Версия.Сборка1),"")+Версия.Сборка2,1,10)+"||");
  OWAПП=OpenWorkArea("ПОРУЧ","","1=0");
  Try
   if not flagОтдРейс then ShowProgress(Упр,"Формирование рейса...."); fi;
   if flagОтдРейс then
      n1=i1; n2=i1;
     else 
      n1=1; n2=Упр; 
   fi;
   for n=n1..n2 do
    ProgressPos(n);
    SetFilter(OWAПП,"UKey="+UKey[n]);
    Бюджет=GetFieldL(OWAПП,1,"БЮДЖЕТ");
    TextFileAppendLn(F,"PP|");
    --Номер палатежного поручения
    Buf=GetFieldS(OWAПП,1,"НОМЕРБУМ");
    Buf=SubStr(Buf,1,10);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Дата платежного поручения
    Buf=DateToString(GetFieldD(OWAПП,1,"ДАТА"));
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Вид платежа
    Buf=GetFieldS(OWAПП,1,"ВИДПЛ");
    if Buf="почтой":	 Buf="1";
      |Buf="телеграфом": Buf="2";
      |Buf="электронно": Buf="3";
      |Buf="срочно":	 Buf="4";
      |True:		 Buf="0";
    fi;
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Сумма платежного поручения
    Buf=Str(GetFieldN(OWAПП,1,"СУММА")*100,0);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --ИНН Платильщика
    Buf=GetFieldS(OWAПП,1,"РЕКВ.ИНН");
    Buf=SubStr(Buf,1,12);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --КПП Платильщика
    Buf=GetFieldS(OWAПП,1,"РЕКВ.КПП");
    Buf=SubStr(Buf,1,9);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Код бюджетополучателя
    Buf=GetFieldS(OWAПП,1,"РЕКВ.РПО_КБП");
    Buf=SubStr(Buf,1,5);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Полное наименование бюджетополучателя-платильщика
    Buf=GetFieldS(OWAПП,1,"РЕКВ.ПолнИмя");
    Buf=SubStr(Buf,1,255);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование платильщика по требованию банка
    Buf=GetFieldS(OWAПП,1,"БАНК.БанкИмя");
    Buf=SubStr(Buf,1,160);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Лицевой счет платильщика
    Buf=GetFieldS(OWAПП,1,"БАНК.РПО_ЛСЧЕТ");
    Buf=SubStr(Buf,1,11);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Код ТОФК
    Buf=GetFieldS(OWAПП,1,"БАНК.РПО_ОФК_КОД");
    Buf=SubStr(Buf,1,4);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --ИНН органа ФК - платильщика
    Buf=GetFieldS(OWAПП,1,"БАНК.РПО_БАНК_ИНН");
    Buf=SubStr(Buf,1,12);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Краткое наименование органа ФК платильщика
    Buf=GetFieldS(OWAПП,1,"БАНК.РПО_ОФК_ИМЯ");
    Buf=SubStr(Buf,1,250);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Расчетный счет органа ФК платильщика
    Buf=GetFieldS(OWAПП,1,"БАНК.РСЧЕТ");
    Buf=SubStr(Buf,1,20);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --БИК Банка платильщика
    Buf=GetFieldS(OWAПП,1,"БАНК.БИК");
    Buf=SubStr(Buf,1,9);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование банка платильщика
    Buf=GetFieldS(OWAПП,1,"БАНК.БАНК");
    Buf=Buf+" "+GetFieldS(OWAПП,1,"БАНК.ГОРОД");
    Buf=TrimRight(Buf);
    Buf=SubStr(Buf,1,160);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование филиала Банка платильщика
    Buf=GetFieldS(OWAПП,1,"БАНК.РПО_ФИЛИАЛ");
    Buf=SubStr(Buf,1,50);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Коррсчет Банка платильщика в РКЦ
    Buf=GetFieldS(OWAПП,1,"БАНК.КСЧЕТ");
    Buf=SubStr(Buf,1,20);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --ИНН Получателя
    Buf=GetFieldS(OWAПП,1,"РЕКВП.ИНН");
    Buf=SubStr(Buf,1,12);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --КПП Получателя
    Buf=GetFieldS(OWAПП,1,"РЕКВП.КПП");
    Buf=SubStr(Buf,1,9);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование получателя по требованию банка
    Buf=GetFieldS(OWAПП,1,"БАНКП.БанкИмя");
    Buf=SubStr(Buf,1,160);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --ИНН органа ФК - получателя
    Buf=GetFieldS(OWAПП,1,"БАНКП.РПО_БАНК_ИНН");
    Buf=SubStr(Buf,1,12);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
     --Краткое наименование органа ФК получателя
    Buf=GetFieldS(OWAПП,1,"БАНКП.РПО_ОФК_ИМЯ");
    Buf=SubStr(Buf,1,250);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Расчетный счет получателя
    Buf=GetFieldS(OWAПП,1,"БАНКП.РСЧЕТ");
    Buf=SubStr(Buf,1,20);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Лицевой счет получателя
    Buf=GetFieldS(OWAПП,1,"БАНКП.РПО_ЛСЧЕТ");
    Buf=SubStr(Buf,1,11);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --БИК Банка получателя
    Buf=GetFieldS(OWAПП,1,"БАНКП.БИК");
    Buf=SubStr(Buf,1,9);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование Банка получателя
    Buf=GetFieldS(OWAПП,1,"БАНКП.БАНК");
    Buf=Buf+" "+ GetFieldS(OWAПП,1,"БАНКП.ГОРОД");
    Buf=TrimRight(Buf);
    Buf=SubStr(Buf,1,160);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование филиала банка получателя
    Buf=GetFieldS(OWAПП,1,"БАНКП.РПО_ФИЛИАЛ");
    Buf=SubStr(Buf,1,50);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Коррсчет Банка получателя в РКЦ
    Buf=GetFieldS(OWAПП,1,"БАНКП.КСЧЕТ");
    Buf=SubStr(Buf,1,20);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Срок платежа
    Buf=Trim(DateToString(GetFieldD(OWAПП,1,"ДАТАД")));
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Очередность палатежа
    Buf=GetFieldS(OWAПП,1,"ДАТАО");
    if Pos("0",Buf)=1: Buf=SubStr(Buf,2,1); fi;
    Buf=SubStr(Buf,1,1);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Назначение платежа
    Buf=GetFieldS(OWAПП,1,"РПО_НАЗНПЛАТ");
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Признак печати КПП
    if Бюджет=True: Buf="1"; else Buf="0"; fi;
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Статус юридического лица
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П1"); else Buf=""; fi;
    Buf=SubStr(Buf,1,2);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Код бюджетной классификации
    Buf=GetFieldS(OWAПП,1,"П2");
    Buf=SubStr(Buf,1,20);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Код ОКАТО
    Buf=GetFieldS(OWAПП,1,"П3");
    Buf=SubStr(Buf,1,11);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Показатель основания платежа
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П4"); else Buf=""; fi;
    Buf=SubStr(Buf,1,2);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Показатель налогового периода
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П5"); else Buf=""; fi;
    Buf=SubStr(Buf,1,10);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Показатель номера документа
    Buf=GetFieldS(OWAПП,1,"П6");
    Buf=SubStr(Buf,1,15);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Показатель даты документа
    Buf=GetFieldS(OWAПП,1,"П7");
    Buf=SubStr(Buf,1,10);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Тип платежа
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П8"); else Buf=""; fi;
    Buf=SubStr(Buf,1,2);
    Buf=FixN(Buf);
    TextFileAppendLn(F,Buf);
    TextFileWriteLn(F,"|");
    --PPST
    OAПП=OpenArray(OWAПП,1,"РПО_Строки_БК","");
    Try
      for nn=1..Records(OAПП) do
	TextFileAppendLn(F,"PPST|");
	 --Код главы
	Buf=GetFieldS(OAПП,nn,"КОДГЛАВЫ");
	Buf=SubStr(Buf,1,3);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Код подраздела
	Buf=GetFieldS(OAПП,nn,"КОДПРД");
	Buf=SubStr(Buf,1,4);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Код целевой статьи
	Buf=GetFieldS(OAПП,nn,"КОДЦСТ");
	Buf=SubStr(Buf,1,7);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Код вида расходов
	Buf=GetFieldS(OAПП,nn,"КОДВР");
	Buf=SubStr(Buf,1,3);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Код целевой программы
	Buf=GetFieldS(OAПП,nn,"КОДЦП");
	Buf=SubStr(Buf,1,3);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Код экономической классификации
	Buf=GetFieldS(OAПП,nn,"КОДЭК");
	Buf=SubStr(Buf,1,3);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Код КИВнФ
	Buf=GetFieldS(OAПП,nn,"КОДКИВнФ");
	Buf=SubStr(Buf,1,20);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Код КИВФ
	Buf=GetFieldS(OAПП,nn,"КОДКИВФ");
	Buf=SubStr(Buf,1,20);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Код доходов
	Buf=GetFieldS(OAПП,nn,"КОДКД");
	Buf=SubStr(Buf,1,20);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Номер бюджетного обязательтсва
-- C 2007 года учет БО не ведется, поле "Месяц финансирования" не используется.
--	  Buf=GetFieldS(OAПП,nn,"НОМБО");
--	  Buf=SubStr(Buf,1,10);
--	  Buf=Fix(Buf);
--	  TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Месяц финансирования
--	  Buf=GetFieldS(OAПП,nn,"МЕСФИН");
--	  Buf=SubStr(Buf,1,2);
--	  Buf=Fix(Buf);
--	  TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Сумма по классификации
	Buf=Str(GetFieldN(OAПП,nn,"Сум")*100);
	TextFileAppendLn(F,Buf);
	TextFileAppendLn(F,"|");
	--Резервное поле
	Buf=GetFieldS(OAПП,nn,"ХФП");
	Buf=SubStr(Buf,1,40);
	Buf=FixN(Buf);
	TextFileAppendLn(F,Buf);
	TextFileWriteLn(F,"|");
      od;
    finally
     CloseWorkArea(OAПП);
    end;
   BeginChanging(OWAПП,False);
   Try
     nn=PutFieldD(OWAПП,1,"РПО_ДатаРейс",ДатаРейс);
     nn=PutFieldI(OWAПП,1,"РПО_НомРейс",НомРейс_);
     nn=PutFieldL(OWAПП,1,"РПО_ВБанк",True);
    EndChanging(OWAПП);
   Except
    CancelChanging(OWAПП);
   end;
   Wrng[n]=0;
   Err[n]=0;
   FNam[n]=Folder+ИмяРейс;
   Msg[n]='Данные успешно выгружены в файл:'+FNam[n];
   od;
  Finally
   CloseWorkArea(OWAПП);
   CloseProgress;
  end;
  Except
   if FlagCreate=True: TextFileClose(F); Message("Ошибка записи в файл '"+Folder+ИмяРейс+"'"); Exit;
     else
      Message("Ошибка создания файла '"+Folder+ИмяРейс+"'"); Exit;
   fi;
  end;
 TextFileClose(F);
 od;
 if not flagОтдРейс then
    Message("Рейс '"+Folder+ИмяРейс+"' успешно сформирован.");
    btnОпись.Enabled=True;
    if EnqOkCancel("Открыть рейс для просмотра ?")=cmOk: ExecuteProgram("NotePad "+Folder+ИмяРейс); fi;
   else
    НомРейс_=НомРейс_+1; 
 fi;
end;

Proc ЗаполнитьРекв (aРекв:Record);
 Рекв=aРекв;
 if Рекв=nil:
    Отправ="";
   else
    Отправ=GetCardFieldS("Контрагент",Рекв,"КорИмя");
 fi;
 Банк=nil;
 ОтправБанк="";
end;
--Процедуры и функции -------------
--
--Обработчики событий полей шаблона-----
Func XXXXX_onValidate (Field:S; Iter:I; Value:S):L;
 if not Length(Value)=5: Message("Длина кода должна быть 5 символов",mtError); ^false; fi;
 ^True;
end;

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

Proc ДатаРейс_OnExit(FieldName: String; Iter: Integer);
 if not ДатаРейс=1.1.100: НомРейсСлед; fi;
  btnОпись.Enabled=False;
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;
  btnОпись.Enabled=False;
 if ДатаРейс=1.1.100: Message("Введите дату формирования документов (рейса)",mtError); Template.Field="ДатаРейс"; ^False; fi;
 ^True;
end;

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

 ^True;
end;

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

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

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

Func Путь_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var path:String;
 Template.HideEditor(False);
 path=Путь;
 if ChooseFolder(path,"Путь выгрузки для рейса")= cmOk then  fi;
 Путь=path;
 Return Cur;
end;

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

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

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

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

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

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

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

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


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

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

Func A_onEnter (Field:String; Iter:Integer):Logical;
 InsertFrame(Упр,Iter+1);
 btnОпись.Enabled=False;
 ^false;
end;

Func D_onEnter (Field:String; Iter:Integer):Logical;
 DeleteFrame(Упр,Iter);
 btnОпись.Enabled=False;
 ^false;
end;

Func Док_onEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if UKey[Iter]="": Rec=Nil; else Rec=StringToRecord(UKey[Iter]); fi;
 if FieldName="НомДок_": 
    Rec=Раб.Документы.ВыборСФильтром(SelfCrd,"НомерБум","");
   else
    Rec=OpenCardFile(SelfCrd,"",Rec);
 fi;
 if Rec=nil: ^False; fi;
 НомДок[Iter]=GetCardFieldS(SelfCrd,Rec,"НОМЕРБУМ");
 ДатаДок[Iter]=GetCardFieldD(SelfCrd,Rec,"ДАТА");
 СумДок[Iter]=GetCardFieldN(SelfCrd,Rec,"СУММА");
 НазнДок[Iter]=GetCardFieldS(SelfCrd,Rec,"РПО_НАЗНПЛАТ");
 UKey[Iter]=RecordToString(Rec);
 Rec=GetCardFieldR(SelfCrd,Rec,"БАНКП");
 if Rec<>nil: ПолучДок[Iter]=GetCardFieldS("БАНК_СЧЕТА",Rec,"БАНКИМЯ"); fi;
 Проверить(Iter,False);
end;

Proc Док_onExit(FieldName: String; Iter: Integer);
 НомДок[Iter]="";
 ДатаДок[Iter]=1.1.100;
  СумДок[Iter]=0;
  НазнДок[Iter]= "";
  ПолучДок[Iter]= "";
 Msg[Iter]="";
 Wrng[Iter]=0;
 Err[Iter]=0;
 UKey[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 ДатаДок_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;
var Rec, tmp: Record;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 if Match(Msg[Iter],"Данные успешно выгружены в файл:*"): ExecuteProgram("NotePad '"+FNam[Iter]+"'"); fi;
 if not Err[Iter]=0 or not Wrng[Iter]=0: OpenBlank("ДОКУМЕНТЫ.БАНК.ПОРУЧ",True,StringToRecord(UKey[Iter]));
    Rec=StringToRecord(UKey[Iter]);
    НомДок[Iter]=GetCardFieldS("Поруч",Rec,"НОМЕРБУМ");
    ДатаДок[Iter]=GetCardFieldD("Поруч",Rec,"ДАТА");
    СумДок[Iter]=GetCardFieldN("Поруч",Rec,"СУММА");
    НазнДок[Iter]=GetCardFieldS("Поруч",Rec,"РПО_НАЗНПЛАТ");
    tmp=GetCardFieldR("Поруч",Rec,"БАНКП");
    if tmp<>nil: ПолучДок[Iter]=GetCardFieldS("БАНК_СЧЕТА",tmp,"БАНКИМЯ"); fi;
    Проверить(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=Раб.вспом.СЭД.ПолучитьПапку("PP","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 (Obj:S);
 if ДатаРейс=1.1.100: Message("Введите дату формирования документов (рейса)",mtError); Template.Field="ДатаРейс"; Exit; fi;
 НомРейсСлед;
end;

Proc btnОпись_onClick(Sender: String);
 ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ.ДР=ДатаРейс;
 ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ.НомерР=НомРейс_;
 ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ.РЕКВ=Рекв;
 ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ.БАНК=Банк;
 OpenBlank("ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ", True);
end;

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

Proc cbПравила_OnChange(Sender: String);
 if not flagПравила:
    flagОтдРейс=False;
    cbОтдРейс.State=False;
 fi;
 cbОтдРейс.Enabled=flagПравила;
end;
--Обработчики событий объектов шаблона-----
--
--Обработчики событий шаблона -----
Proc Template_onOpen(Create:L);
var Rec: Record;
var i:I;
 ДатаРейс=ToDay;
 НомРейсСлед;
 if XXXXX="":
    Rec=Раб.Бюджет2005.НашРекв;
    if not Rec=nil: 
       XXXXX=GetCardFieldS("Контрагент",Rec,"РПО_КБП"); 
       if not Length(XXXXX)=5: XXXXX=""; fi;
       ЗаполнитьРекв(Rec);
    fi;
 fi;
 Инициализация;
 if not flagПравила:
    flagОтдРейс=False;
    cbОтдРейс.State=False;
 fi;
 cbОтдРейс.Enabled=flagПравила;
end;
--Обработчики событий шаблона -----
--

Конец