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

btnОпись :Object;
var Упр:Handle;

Func Format36(Source:Integer) :String;
var Des, Ost :Integer;
 if Source<0 and Source>1295 : ^("Ошибка! Выход за границы диапазона 1..1295"); fi;
 Des=Int(Trunc(Source/36));
 Ost=Source-(Des*36);
 ^(if(Des>=0 and Des<=9, Str(Des), Chr(Des+55))+if(Ost>=0 and Ost<=9, Str(Ost), Chr(Ost+55)));
end;

FlagLVS  :L=[False];
FlagRules: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(FlagLVS, Format36(1007+НомРейс_), Format36(НомРейс_));
ИмяРейс_:S;
var ИмяРейс:S=if(FlagRules,XXXXX+DD+НомРейс+".PP"+M,ИмяРейс_);

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

var пп[]:i=$;
var НомПП[]:S;
var ДатаПП[]:D;
var СумПП[]:N;
var ПолучПП[]:S;
var НазнПлатПП[]:S;
var Msg[]:S;
var Wrng[]:I;
var Err[]:I;
var UKey[]:S;

var ИтогСумПП:N=SumOfArray(СумПП,Упр);

var Folder:S;

FlagВБанк:L=[True];
var FlagВБанк_:S=if(FlagВБанк,"ДА","НЕТ");
var ДН:D=[ToDay];
var ДК:D=[ToDay];
var Рекв:Record;
var Банк:Record;
var ЛС_:S=if(Банк=nil,"Не определено",GetCardFieldS("БАНК_СЧЕТА",Банк,"РПО_ЛСЧЕТ")+" ("+GetCardFieldS("БАНК_СЧЕТА",Банк,"РПО_ОФК_ИМЯ")+")");
--
--Процедуры и функции -------------
Proc Clear;
 ClearVariable(Упр);
 ClearVariable(НомПП);
 ClearVariable(ДатаПП);
 ClearVariable(СумПП);
 ClearVariable(ПолучПП);
 ClearVariable(НазнПлатПП);
 ClearVariable(Msg);
 ClearVariable(Wrng);
 ClearVariable(Err);
 ClearVariable(UKey);
end;

Proc ClearEmpty;
var n:i;
 n=1; 
 While n<=Упр do
  if UKey[n]="": DeleteFrame(Упр,n);
   else 
    n=n+1; 
  fi; 
 od;
end;

Func Проверить(Iter:I; Full:L):L;
var OWA,OA,n,nr,n2,nr2,z1,z2:i;
var Sum1,Sum2:N;
var tmp:S;
 if Iter>0: tmp=Ukey[Iter]; fi;
 ClearEmpty;
 --восстанавливаем позицию Iter по UKey из-за возможного ClearEmpty
 if Iter>0:
    for n=1..Упр do 
     if tmp=Ukey[n]: Break; fi; 
    od;
    Iter=n;
 fi;
 if Full:
    if Упр<1: Message("Список платежных поручений пуст!"); InsertFrame(Упр,1); ^False; fi;
    if ДатаРейс=1.1.100: Message("Введите дату формирования рейса !"); Template.Field="ДатаРейс"; ^False; fi;
    if НомРейс_=0: Message("Введите порядковый номер рейса !");  Template.Field="НомРейс_"; ^False; fi;
    if FlagLVS:
      if НомРейс_<1 or НомРейс_>288 : Message("Ошибка! Выход за границы диапазона номеров 1..288 для выделенной ЛВС!"); Template.Field="НомРейс_"; ^False; fi;
    else
      if НомРейс_<1 or НомРейс_>1007: Message("Ошибка! Выход за границы диапазона номеров 1..1007 для ЛВС!"); Template.Field="НомРейс_"; ^False; fi;
    fi;
    if FlagRules:
       if XXXXX="": Message("Введите код организации !"); Template.Field="XXXXX"; ^False; fi;
      else
       if ИмяРейс="": Message("Введите имя рейса !"); 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 GetFieldL(OWA,1,"РПО_Учитывать")=False:
	 if Msg[n]="": Msg[n]="Ошибка! "; else Msg[n]=Msg[n]+" "; fi;
	 Msg[n]=Msg[n]+"Флаг 'Учитывать' в платежном поручении не установлен!";
	 Err[n]=Err[n]+1;
      fi;
      if GetFieldD(OWA,1,"ДАТА")=1.1.100:
	 if Msg[n]="": Msg[n]="Ошибка! "; else Msg[n]=Msg[n]+" "; fi;
	 Msg[n]=Msg[n]+"Не указана дата платежного поручения!";
	 Err[n]=Err[n]+1;
      fi;
      Sum1=Round(GetFieldN(OWA,1,"СУММА"),2);
      if Sum1=0:
	 if Msg[n]="": Msg[n]="Ошибка! "; else Msg[n]=Msg[n]+" "; fi;
	 Msg[n]=Msg[n]+"Не указана сумма платежного поручения!";
	 Err[n]=Err[n]+1;
      fi;
      if GetFieldR(OWA,1,"РЕКВ")=Nil: 
	 if Msg[n]="": Msg[n]="Ошибка! "; else Msg[n]=Msg[n]+" "; fi;
	 Msg[n]=Msg[n]+"Не указан плательщик!";
	 Err[n]=Err[n]+1;
      fi;
      if GetFieldR(OWA,1,"РЕКВП")=Nil: 
	 if Msg[n]="": Msg[n]="Ошибка! "; else Msg[n]=Msg[n]+" "; fi;
	 Msg[n]=Msg[n]+"Не указан получатель !";
	 Err[n]=Err[n]+1;
      fi;
      if GetFieldR(OWA,1,"БАНК")=Nil: 
	 if Msg[n]="": Msg[n]="Ошибка! "; else Msg[n]=Msg[n]+" "; fi;
	 Msg[n]=Msg[n]+"Не указан расчетный счет плательщика!";
	 Err[n]=Err[n]+1;
      fi;
      if GetFieldR(OWA,1,"БАНКП")=Nil: 
	 if Msg[n]="": Msg[n]="Ошибка! "; else Msg[n]=Msg[n]+" "; fi;
	 Msg[n]=Msg[n]+"Не указан расчетный счет получателя!";
	 Err[n]=Err[n]+1;
      fi;
      OA=OpenArray(OWA,1,"РПО_СТРОКИ_БК","");
      Nr2=Records(OA);
      if Nr2>0:
	 Sum2=0;
	 for n2=1..nr2 do Sum2=Sum2+GetFieldN(OA,n2,"СУМ"); od;
	 Sum2=Round(Sum2,2);
	 if Sum1<>Sum2:
	    if Msg[n]="": Msg[n]="Ошибка! "; else Msg[n]=Msg[n]+" "; fi;
	    Msg[n]=Msg[n]+"Сумма по строкам бюджетной классификации не совпадает с суммой платежного поручения !";
	    Err[n]=Err[n]+1;
	 fi;
	else
	 if Msg[n]="": Msg[n]="Предупреждение! "; 
	   else 
	    if Match(Msg[n],"*Предупреждение*"): Msg[n]=Msg[n]+" "; else Msg[n]=Msg[n]+" Предупреждение! "; fi;
	 fi;
	 Msg[n]=Msg[n]+"Отсутствует рашифровка суммы по строкам бюджетной классификации";
	 Wrng[n]=Wrng[n]+1;
      fi;
      CloseWorkArea(OA);
      if GetFieldI(OWA,1,"РПО_НомРейс")<>0 and GetFieldD(OWA,1,"РПО_ДатаРейс")<>1.1.100:
	 if Msg[n]="": Msg[n]="Предупреждение! "; 
	   else 
	    if Match(Msg[n],"*Предупреждение*"): Msg[n]=Msg[n]+" "; else Msg[n]=Msg[n]+" Предупреждение! "; fi;
	 fi;
	 Msg[n]=Msg[n]+"Плат. поруч. уже выгружалось рейсом №"+Str(GetFieldI(OWA,1,"РПО_НомРейс"))+" от "+DateToString(GetFieldD(OWA,1,"РПО_ДатаРейс"));
	 Wrng[n]=Wrng[n]+1;
      fi;
     else
      Msg[n]="Ошибка! Платежное поручение не найдено !";  Err[n]=Err[n]+1;
   fi;
   if Err[n]=0 and Wrng[n]=0: Msg[n]="Ok"; fi;
  od;
 Finally
  CloseWorkArea(OWA);
  CloseProgress;
 end;
 ^True;
end;

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

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

Proc СохранитьРейс (ДР:D; НР:I);
var OWA,nr,z,n:I;
 OWA=OpenWorkArea("ПОРУЧ","","1=0");
 Try
  BeginChanging(OWA,False);
  Try
   for n=1..Упр do
    SetFilter(OWA,"UKey="+UKey[n]);
    z=PutFieldD(OWA,1,"РПО_ДатаРейс",ДР);
    z=PutFieldI(OWA,1,"РПО_НомРейс",НР);
    z=PutFieldL(OWA,1,"РПО_ВБанк",True);
   od;
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
  end;
 Finally
  CloseWorkArea(OWA);
 end;
end;

Proc ЗагрузитьРейс  (ДР:D; НР:I);
var OWA,n,nr:I;
var Rec:Record;
 Clear;
 OWA=OpenWorkArea("ПОРУЧ","","РПО_НомРейс="+Str(НР)+" and РПО_ДатаРейс>="+DateToString(ДР)+" and РПО_ДатаРейс<="+DateToString(ДР));
 Try
  Nr=Records(OWA);
  for n=1..Nr do
   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);
 end;
end;

--Процедуры и функции -------------
--
--Обработчики событий полей шаблона-----
Func XXXXX_onValidate (Field:S; Iter:I; Value:S):L;
 if Length(Value)>5: Message("Длина кода не может превышать 5 символов !"); ^false; fi;
 ^True;
end;

Func ДатаРейс_onEnter (Field:S; Iter:I):L;
var tmp:d;
 tmp=Calendar;
 if tmp=1.1.100: ^False; fi;
 ДатаРейс=tmp;
 НомРейсСлед;
 btnОпись.Enabled=False;
 ^False;
end;

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

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

Func ИмяРейс_onEnter (Field:S; Iter:I):L;
 if FlagRules: Message("Установлен флаг формирования имени рейса по правилам, ручной ввод имени не возможен!"); Template.Object="cbПравила"; ^False; fi;
 btnОпись.Enabled=False;
 ^True;
end;

Func ИмяРейс_onValidate (Field:S; Iter:I; Value:S):L;
 ИмяРейс_=Value;
 ^True;
end;

Func FlagВБанк_onEnter (Field:S; Iter:I):L;
 if FlagВБанк: FlagВБанк=False; else FlagВБанк=True; fi;
 ^False;
end;

Func ДН_onEnter  (Field:S; Iter:I):L;
var tmp:d;
 tmp=Calendar;
 if tmp=1.1.100: ^False; fi;
 ДН=tmp;
 ^False;
end;

Func ДК_onEnter  (Field:S; Iter:I):L;
var tmp:d;
 tmp=Calendar;
 if tmp=1.1.100: ^False; fi;
 ДК=tmp;
 ^False;
end;

Func ЛС_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec1,Rec2: Record;
 Rec1=OpenCardFile("Контрагент","Наше",Рекв,crdRecordOnly);
 if Rec1=nil: ^False; fi;
 Rec2=OpenCardFile("Банк_счета","КОНТРАГЕНТ="+RecordToString(Rec1),Банк,crdRecordOnly);
 if Rec2=nil: ^False; fi;
 Рекв=rec1;
 Банк=rec2;
 ^False;
end;


Proc ЛС_OnExit(FieldName: String; Iter: Integer);
 Банк=nil;
end;

Func Add_Iter (Field:S; Iter:I):L;
 InsertFrame(Упр,Iter+1);
 btnОпись.Enabled=False;
 ^false;
end;

Func Del_Iter (Field:S; Iter:I):L;
 if Упр>1: DeleteFrame(Упр,Iter);
   else 
    DeleteFrame(Упр,Iter);
    InsertFrame(Упр,Iter);
 fi;
 btnОпись.Enabled=False;
 ^false;
end;

Func ПП_onEnter (Field:S; Iter:I):L;
var Rec,tmp: Record;
 if UKey[Iter]="": Rec=Nil; else Rec=StringToRecord(UKey[Iter]); fi;
 Rec=OpenCardFile("Поруч","РПО_Учитывать",Rec);
 if Rec=nil: ^False; fi;
 НомПП[Iter]=GetCardFieldS("Поруч",Rec,"НОМЕРБУМ");
 ДатаПП[Iter]=GetCardFieldD("Поруч",Rec,"ДАТА");
 СумПП[Iter]=GetCardFieldN("Поруч",Rec,"СУММА");
 НазнПлатПП[Iter]=GetCardFieldS("Поруч",Rec,"РПО_НАЗНПЛАТ");
 UKey[Iter]=RecordToString(Rec);
 tmp=GetCardFieldR("Поруч",Rec,"БАНКП");
 if tmp<>nil: ПолучПП[Iter]=GetCardFieldS("БАНК_СЧЕТА",tmp,"БАНКИМЯ"); fi;
 Проверить(Iter,False);
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРейс_onClick (Obj:S);
var n,F,nn:I;
var Бюджет,Flag,FlagCreate:L;
var Buf,tmp:S;
var OWAПП,OWAРекв,OWAБанк,OAПП:I;
 if Проверить(0,True)=False: Exit; fi;
 n=SumOfArray(Err,Упр);
 if n>0: Message("В результате проверки обнаружено ошибок :"+Str(n)+Chr(13)+"Формирование рейса отменено!"); Exit; fi;
 nn=SumOfArray(Wrng,Упр);
 if nn>0: n=EnqOkCancel("В результате проверки обнаружено предупреждений :"+Str(nn)+" Игнорировать предупреждения ?");
    if n=cmCancel:  Exit; fi;
 fi;
 n=ChooseFolder(Folder,"Сохранить как");
 if n=cmCancel: Message("Отказ от формирования рейса"); Exit; fi;
 if ExistFile(Folder+ИмяРейс):
    n=EnqOkCancel("Файл '"+Folder+ИмяРейс+"' существует. Перезаписать файл ?");
    if n=cmCancel: Message("Отказ от формирования рейса"); Exit; fi;
 fi;
 Try
  FlagCreate=False;
  F=TextFileCreate(Folder+ИмяРейс);
  FlagCreate=True;
  TextFileWriteLn(F,"FK|2007.03|Турбо Бухгалтер 6.9 Бюджет-25н|"+SubStr(Str(Версия.Сборка0)+if(Версия.Сборка1<>0,"."+Str(Версия.Сборка1),"")+Версия.Сборка2,1,10)+"||");
  OWAПП=OpenWorkArea("ПОРУЧ","","1=0");
  OWAРекв=OpenWorkArea("КОНТРАГЕНТ","","1=0");
  OWAБанк=OpenWorkArea("БАНК_СЧЕТА","","1=0");
  Try
   ShowProgress(Упр,"Формирование рейса....");
   for n=1..Упр do
    ProgressPos(n);
    SetFilter(OWAПП,"UKey="+UKey[n]);
    Бюджет=GetFieldL(OWAПП,1,"БЮДЖЕТ");
    TextFileAppendLn(F,"PP|");
    --Номер палатежного поручения
    Buf=GetFieldS(OWAПП,1,"НОМЕРБУМ");
    Buf=SubStr(Buf,1,10);
    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);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --ИНН Платильщика
    SetFilter(OWAРекв,"UKey="+RecordToString(GetFieldR(OWAПП,1,"РЕКВ")));
    Buf=GetFieldS(OWAРекв,1,"ИНН");
    Buf=SubStr(Buf,1,12);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --КПП Платильщика
    Buf=GetFieldS(OWAРекв,1,"КПП");
    Buf=SubStr(Buf,1,9);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Код бюджетополучателя
    Buf=GetFieldS(OWAРекв,1,"РПО_КБП");
    Buf=SubStr(Buf,1,5);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Полное наименование бюджетополучателя-платильщика
    Buf=GetFieldS(OWAРекв,1,"ПолнИмя");
    Buf=SubStr(Buf,1,255);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование платильщика по требованию банка
    SetFilter(OWAБанк,"UKey="+RecordToString(GetFieldR(OWAПП,1,"БАНК")));
    Buf=GetFieldS(OWAБанк,1,"БанкИмя");
    Buf=SubStr(Buf,1,160);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Лицевой счет платильщика
    Buf=GetFieldS(OWAБанк,1,"РПО_ЛСЧЕТ");
    Buf=SubStr(Buf,1,11);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Код ТОФК
    Buf=GetFieldS(OWAБанк,1,"РПО_ОФК_КОД");
    Buf=SubStr(Buf,1,4);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --ИНН органа ФК - платильщика
    Buf=GetFieldS(OWAБанк,1,"РПО_БАНК_ИНН");
    Buf=SubStr(Buf,1,12);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Краткое наименование органа ФК платильщика
    Buf=GetFieldS(OWAБанк,1,"РПО_ОФК_ИМЯ");
    Buf=SubStr(Buf,1,250);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Расчетный счет органа ФК платильщика
    Buf=GetFieldS(OWAБанк,1,"РСЧЕТ");
    Buf=SubStr(Buf,1,20);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --БИК Банка платильщика
    Buf=GetFieldS(OWAБанк,1,"БИК");
    Buf=SubStr(Buf,1,9);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование банка платильщика
    Buf=GetFieldS(OWAБанк,1,"БАНК");
    Buf=Buf+" "+GetFieldS(OWAБанк,1,"ГОРОД");
    Buf=TrimRight(Buf);
    Buf=SubStr(Buf,1,160);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование филиала Банка платильщика
    Buf=GetFieldS(OWAБанк,1,"РПО_ФИЛИАЛ");
    Buf=SubStr(Buf,1,50);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Коррсчет Банка платильщика в РКЦ
    Buf=GetFieldS(OWAБанк,1,"КСЧЕТ");
    Buf=SubStr(Buf,1,20);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --ИНН Получателя
    SetFilter(OWAРекв,"UKey="+RecordToString(GetFieldR(OWAПП,1,"РЕКВП")));
    Buf=GetFieldS(OWAРекв,1,"ИНН");
    Buf=SubStr(Buf,1,12);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --КПП Получателя
    Buf=GetFieldS(OWAРекв,1,"КПП");
    Buf=SubStr(Buf,1,9);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование получателя по требованию банка
    SetFilter(OWAБанк,"UKey="+RecordToString(GetFieldR(OWAПП,1,"БАНКП")));
    Buf=GetFieldS(OWAБанк,1,"БанкИмя");
    Buf=SubStr(Buf,1,160);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --ИНН органа ФК - получателя
    Buf=GetFieldS(OWAБанк,1,"РПО_БАНК_ИНН");
    Buf=SubStr(Buf,1,12);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
     --Краткое наименование органа ФК получателя
    Buf=GetFieldS(OWAБанк,1,"РПО_ОФК_ИМЯ");
    Buf=SubStr(Buf,1,250);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Расчетный счет получателя
    Buf=GetFieldS(OWAБанк,1,"РСЧЕТ");
    Buf=SubStr(Buf,1,20);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Лицевой счет получателя
    Buf=GetFieldS(OWAБанк,1,"РПО_ЛСЧЕТ");
    Buf=SubStr(Buf,1,11);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --БИК Банка получателя
    Buf=GetFieldS(OWAБанк,1,"БИК");
    Buf=SubStr(Buf,1,9);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование Банка получателя
    Buf=GetFieldS(OWAБанк,1,"БАНК");
    Buf=Buf+" "+GetFieldS(OWAБанк,1,"ГОРОД");
    Buf=TrimRight(Buf);
    Buf=SubStr(Buf,1,160);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Наименование филиала банка получателя
    Buf=GetFieldS(OWAБанк,1,"РПО_ФИЛИАЛ");
    Buf=SubStr(Buf,1,50);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Коррсчет Банка получателя в РКЦ
    Buf=GetFieldS(OWAБанк,1,"КСЧЕТ");
    Buf=SubStr(Buf,1,20);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Срок платежа
    Buf=Trim(DateToString(GetFieldD(OWAПП,1,"ДАТАД")));
    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);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Назначение платежа
    Buf=GetFieldS(OWAПП,1,"РПО_НАЗНПЛАТ");
    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);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Код бюджетной классификации
    Buf=GetFieldS(OWAПП,1,"П2");
    Buf=SubStr(Buf,1,20);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Код ОКАТО
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П3"); else Buf=""; fi;
    Buf=SubStr(Buf,1,11);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Показатель основания платежа
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П4"); else Buf=""; fi;
    Buf=SubStr(Buf,1,2);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Показатель налогового периода
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П5"); else Buf=""; fi;
    Buf=SubStr(Buf,1,10);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Показатель номера документа
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П6"); else Buf=""; fi;
    Buf=SubStr(Buf,1,10);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Показатель даты документа
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П7"); else Buf=""; fi;
    Buf=SubStr(Buf,1,10);
    TextFileAppendLn(F,Buf);
    TextFileAppendLn(F,"|");
    --Тип платежа
    if Бюджет=True: Buf=GetFieldS(OWAПП,1,"П8"); else Buf=""; fi;
    Buf=SubStr(Buf,1,2);
    TextFileAppendLn(F,Buf);
    TextFileWriteLn(F,"|");
    --PPST
    OAПП=OpenArray(OWAПП,1,"РПО_Строки_БК","");
    for nn=1..Records(OAПП) do
    TextFileAppendLn(F,"PPST|");
      --Код главы
     Buf=GetFieldS(OAПП,nn,"КОДГЛАВЫ");
     Buf=SubStr(Buf,1,3);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Код подраздела
     Buf=GetFieldS(OAПП,nn,"КОДПРД");
     Buf=SubStr(Buf,1,4);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Код целевой статьи
     Buf=GetFieldS(OAПП,nn,"КОДЦСТ");
     Buf=SubStr(Buf,1,3);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Код вида расходов
     Buf=GetFieldS(OAПП,nn,"КОДВР");
     Buf=SubStr(Buf,1,3);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Код целевой программы
     Buf=GetFieldS(OAПП,nn,"КОДЦП");
     Buf=SubStr(Buf,1,3);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Код экономической классификации
     Buf=GetFieldS(OAПП,nn,"КОДЭК");
     Buf=SubStr(Buf,1,6);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Код КИВнФ
     Buf=GetFieldS(OAПП,nn,"КОДКИВнФ");
     Buf=SubStr(Buf,1,20);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Код КИВФ
     Buf=GetFieldS(OAПП,nn,"КОДКИВФ");
     Buf=SubStr(Buf,1,20);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Код доходов
     Buf=GetFieldS(OAПП,nn,"КОДКД");
     Buf=SubStr(Buf,1,20);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Номер бюджетного обязательтсва
     Buf=GetFieldS(OAПП,nn,"НОМБО");
     Buf=SubStr(Buf,1,10);
     TextFileAppendLn(F,Buf);
     TextFileAppendLn(F,"|");
     --Месяц финансирования
     Buf=GetFieldS(OAПП,nn,"МЕСФИН");
     Buf=SubStr(Buf,1,2);
     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);
     TextFileAppendLn(F,Buf);
     TextFileWriteLn(F,"|");
    od;
    CloseWorkArea(OAПП);
  od;
  Finally
   CloseWorkArea(OWAПП);
   CloseWorkArea(OWAРекв);
   CloseWorkArea(OWAБанк);
   CloseProgress;
  end;
  Except
   if FlagCreate=True: TextFileClose(F); Message("Ошибка записи в файл '"+Folder+ИмяРейс+"'"); Exit;
     else
      Message("Ошибка создания файла '"+Folder+ИмяРейс+"'"); Exit;
   fi;
  end;
 TextFileClose(F);
 СохранитьРейс(ДатаРейс,НомРейс_);
 Message("Рейс '"+Folder+ИмяРейс+"' успешно сформирован.");
 btnОпись.Enabled=True;
 if EnqOkCancel("Открыть рейс для просмотра ?")=cmOk: ExecuteProgram("NotePad "+Folder+ИмяРейс); fi;
end;

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

Proc btnОчистить_onClick (Obj:S);
 Clear;
 if Упр<1: InsertFrame(Упр,1); fi;
 btnОпись.Enabled=False;
end;

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

Proc btnЗагрПП_onClick (Obj:S);
var OWA,n,nr:i;
var Rec:Record;
var F:S;
 if ДК<ДН: Message("Начальная дата превышает конечную !"); 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 Банк<>nil: F=F+" and Банк="+RecordToString(Банк); fi;
 Clear;
 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;
 Проверить(0,False);
 if Упр<1: InsertFrame(Упр,1); fi;
 btnОпись.Enabled=False;
end;

Proc btnПроверить_onClick (Obj:S);
 Проверить(0,False);
 if Упр<1: InsertFrame(Упр,1); fi;
 Message("Проверка завершена. Ошибок :"+Str(SumOfArray(Err,Упр))+" Предупреждений :"+Str(SumOfArray(Wrng,Упр)));
end;

--Обработчики событий объектов шаблона-----
--
--Обработчики событий шаблона -----
Proc Template_onOpen(Create:L);
var Rec: Record;
 if Упр<1: InsertFrame(Упр,1); fi;
 ДатаРейс=ToDay;
 НомРейсСлед;
 if XXXXX="":
    Rec=Раб.Бюджет2005.НашРекв;
    if not Rec=nil: XXXXX=GetCardFieldS("Контрагент",Rec,"РПО_КБП"); fi;
 fi;
 btnОпись.Enabled=False;
end;

Proc Template_onClose(Destroy:L);
 Clear;
end;

--Обработчики событий шаблона -----
--

Конец
