-- Шаблон создан мастером бланков
-- 25.02.2005 14:13:51
--
БланкСШаблоном "Импорт расходного расписания распорядителя";

var YYYY:I=[Year(ToDay)];
var SelfCrd:S=if(YYYY<2009,"РПО_РАСХОД_РАСПИСН","РПО_РР_ИСХ");
ПБС:Record;
var НаимПБС:S=if(ПБС=nil or YYYY=0,"",GetCardFieldS("Контрагент",ПБС,"КорИмя"));
var РР:Record;
var НомРР:S=if(РР=nil or YYYY=0,"",GetCardFieldS(SelfCrd,РР,"НомерДок"));

var Buf[]:S;
--
--Процедуры и функции -------------
Func БанкВПризн (aВерсия:I; aПБС_Банк:Record):S;
var tmp,Mask:S;
var n,nn:i;
 if aВерсия>=2:
    if not aПБС_Банк=nil:
       RefreshAna;
       Mask="ЛС.*";
       nn=RecSignsCount("БАНК_СЧЕТА",aПБС_Банк);
       for n=1..nn do
	tmp=RecSign("БАНК_СЧЕТА",aПБС_Банк,n);
	if Раб.Бюджет2005.MatchMask(tmp,Mask):
	   ^tmp;
	fi;
       od;
      else
       ^"";
    fi;
 fi;
end;

Proc Импорт;
var OWA_S,OA_S,n2_S,nr1_s,nr2_s,OWA_T,OA_T,nr1_t,z,yyyy:I;
var Rec:Record;
var КБК_,КСГУ_:S;
 OWA_S=OpenWorkArea("РПО_РАСХОД_РАСПИСН","","UKey="+RecordToString(РР));
 OWA_T=OpenWorkArea("РПО_РАСХОД_РАСПИСН_ВХ","","1=0");
 Try
  nr1_s=Records(OWA_S);
  if nr1_s=0: Message("Ошибка ! Расходное расписание №"+НомРР+" не найдено !"); Exit; fi;
  SetFilter(OWA_T,"РБС_ПБС=False and НОМЕРБУМ='"+НомРР+"'"+" and ДАТАДОК>="+DateToString(Dat(1,1,GetFieldI(OWA_S,1,"ГОД"))));
  nr1_t=Records(OWA_T);
  if nr1_t>0: Message("Ошибка ! Расходное расписание №"+НомРР+" уже существует в картотеке поступивших расходных расписаний !"); Rec=GetRecordKey(OWA_T,1); OpenBlank("ДОКУМЕНТЫ.ЛБО.РАСХОД_РАСПИСН_ВХ_ПБС",True,Rec); Exit; fi;
  BeginChanging(OWA_T);
  Try
   z=InsertRecord(OWA_T);
   Rec=GetRecordKey(OWA_T,z);
   z=PutFieldS(OWA_T,z,"НОМЕРБУМ",НомРР);
   z=PutFieldI(OWA_T,z,"НОМЕР",GetFieldI(OWA_S,1,"НОМЕР"));
   z=PutFieldD(OWA_T,z,"ДАТАДОК",GetFieldD(OWA_S,1,"ДАТАДОК"));
   z=PutFieldR(OWA_T,z,"РБС",GetFieldR(OWA_S,1,"РБС"));
   z=PutFieldS(OWA_T,z,"ППП",GetFieldS(OWA_S,1,"ППП"));
   z=PutFieldS(OWA_T,z,"НАИМППП",GetFieldS(OWA_S,1,"НАИМППП"));
   z=PutFieldR(OWA_T,z,"ПБС",GetFieldR(OWA_S,1,"ПБС"));
   z=PutFieldR(OWA_T,z,"ПБС_Банк",GetFieldR(OWA_S,1,"ПБС_Банк"));
   z=PutFieldS(OWA_T,z,"ПБС_ПризнЛС",БанкВПризн (GetFieldI(OWA_S,1,"Версия"),GetFieldR(OWA_S,1,"ПБС_Банк")));
   z=PutFieldD(OWA_T,z,"ДАТАВД",GetFieldD(OWA_S,1,"ДАТАВД"));
   z=PutFieldS(OWA_T,z,"ПРИЛОЖ",GetFieldS(OWA_S,1,"ПРИЛОЖ"));
   z=PutFieldS(OWA_T,z,"КФД",GetFieldS(OWA_S,1,"КФД"));
   z=PutFieldI(OWA_T,z,"ФОРМАТ",GetFieldI(OWA_S,1,"ФОРМАТ"));
   z=PutFieldS(OWA_T,z,"СПЕЦУКАЗ",GetFieldS(OWA_S,1,"СПЕЦУКАЗ"));
   z=PutFieldS(OWA_T,z,"ЛБО_КОДСЧДЕБ","1.501.05");
   z=PutFieldS(OWA_T,z,"ЛБО_КОДСЧКРЕ","1.501.03");
   z=PutFieldS(OWA_T,z,"ФИН_КОДСЧДЕБ","1.ЗАБ.91");
   z=PutFieldS(OWA_T,z,"ФИН_КОДСЧКРЕ","1.ЗАБ.14");
   z=PutFieldL(OWA_T,z,"РБС_ПБС",False);
   z=PutFieldI(OWA_T,z,"Версия",GetFieldI(OWA_S,1,"Версия"));
   OA_S=OpenArray(OWA_S,1,"ПОЗИЦИИ","");
   OA_T=OpenArray(OWA_T,1,"ПОЗИЦИИ","");
   nr2_S=Records(OA_S);
   for n2_s=1..nr2_s do
    z=InsertRecord(OA_T);
    КБК_=GetFieldS(OA_S,n2_s,"КБК");
    КСГУ_=GetFieldS(OA_S,n2_s,"КСГУ");
    z=PutFieldS(OA_T,z,"КБК",КБК_);
    z=PutFieldS(OA_T,z,"КСГУ",КСГУ_);
    z=PutFieldS(OA_T,z,"ПРИЗН",GetFieldS(OA_S,n2_s,"ПРИЗН"));
    if not GetFieldN(OA_S,n2_s,"ЛБО_ИЗМ")=0:
       z=PutFieldS(OA_T,z,"ЛБО_СЧДЕБ",КБК_+".1.501.05."+КСГУ_);
       z=PutFieldS(OA_T,z,"ЛБО_СЧКРЕ",КБК_+".1.501.03."+КСГУ_);
    fi;
    z=PutFieldN(OA_T,z,"ЛБО_ИЗМ",GetFieldN(OA_S,n2_s,"ЛБО_ИЗМ"));
    if not GetFieldN(OA_S,n2_s,"ФИН_ИЗМ")=0:
       z=PutFieldS(OA_T,z,"ФИН_СЧДЕБ",КБК_+".1.ЗАБ.91."+КСГУ_);
       z=PutFieldS(OA_T,z,"ФИН_СЧКРЕ",КБК_+".1.ЗАБ.14."+КСГУ_);
    fi;
    z=PutFieldN(OA_T,z,"ФИН_ИЗМ",GetFieldN(OA_S,n2_s,"ФИН_ИЗМ"));
    z=PutFieldS(OA_T,z,"ПРИМЕЧ1",GetFieldS(OA_S,n2_s,"ПРИМЕЧ1"));
    z=PutFieldS(OA_T,z,"ПРИМЕЧ2",GetFieldS(OA_S,n2_s,"ПРИМЕЧ2"));
   od;
   CloseWorkArea(OA_S);
   CloseWorkArea(OA_T);
   EndChanging(OWA_T);
  Except
   CancelChanging(OWA_T);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA_S);
  CloseWorkArea(OWA_T);
 end;
 Message("Импорт успешно завершен.^MВыполните расчет в открывшемся бланке !");
 OpenBlank("ДОКУМЕНТЫ.ЛБО.РАСХОД_РАСПИСН_ВХ_ПБС",True,Rec);
end;

Proc ПроверитьСчета(OWA:I; aРаздел:S);
var OA,n,nr,y,yy:I;
var БК,КОСГУ,СчД,СчК:S;
 if aРаздел="ПОФ": Exit; fi;
 OA=OpenArray(OWA,1,aРаздел,"");
 nr=Records(OA);
 if aРаздел="Ассигн": yy=3; СчД=".1.503."; СчК=".1.503.";
   |aРаздел="ЛБО":    yy=3; СчД=".1.501."; СчК=".1.501.";
   |aРаздел="ПОФ":    yy=1; СчД="";	   СчК="";
 fi;
 for n=1..nr do
  for y=1..yy do
   Раб.КСА.Добавить(GetFieldS(OA,n,"БК")+СчД+Str(y)+"5."+GetFieldS(OA,n,"КОСГУ"));
   Раб.КСА.Добавить(GetFieldS(OA,n,"БК")+СчК+Str(y)+"3."+GetFieldS(OA,n,"КОСГУ"));
  od;
 od;
 CloseWorkArea(OA);
end;

Proc ИмпортРаздела(OWA1:I; OWA2:I; aРаздел:S);
var OA1,OA2,n1,n2,nr1,z,y,yy:i;
var Key,БК_,КОСГУ_,Призн_,tmp,СчД,СчК:S;
 if aРаздел="ПОФ": Exit; fi;
 ClearVariable(Buf);
 if aРаздел="Ассигн": yy=3; СчД=".1.503."; СчК=".1.503.";
   |aРаздел="ЛБО":    yy=3; СчД=".1.501."; СчК=".1.501.";
   |aРаздел="ПОФ":    yy=1; СчД="";	   СчК="";
 fi;
 OA1=OpenArray(OWA1,1,aРаздел,"");
 OA2=OpenArray(OWA2,1,aРаздел,"");
 nr1=Records(OA1);
 for n1=1..nr1 do
  БК_=GetFieldS(OA1,n1,"БК");
  КОСГУ_=GetFieldS(OA1,n1,"КОСГУ");
  Призн_=GetFieldS(OA1,n1,"Призн");
  if not Призн_="":
     tmp="";
     for y=1..yy do
      tmp=tmp+"|"+БК_+СчД+Str(y)+"5."+КОСГУ_+"|"+БК_+СчК+Str(y)+"3."+КОСГУ_;
     od;
     tmp=SubStr(tmp,2,255);
     tmp=Раб.Бюджет2005.СписокСправ(tmp,0,"");
     Призн_=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Призн_," ",tmp,"|");
     Призн_=Раб.Бюджет2005.СортироватьНаборСлов(Призн_," ",True);
  fi;
  Key=БК_+"."+КОСГУ_+"#"+GetFieldS(OA1,n1,"ДОПКЛ")+"#"+Призн_+"#"+GetFieldS(OA1,n1,"ПРИМЕЧ");
  z=SearchInArray(Buf,Key,True);
  if z=-1:
     z=InsertInArraySort(Buf,Key);
     n2=InsertRecord(OA2,z);
     n2=PutFieldS(OA2,n2,"БК",БК_);
     n2=PutFieldS(OA2,n2,"КОСГУ",КОСГУ_);
     n2=PutFieldS(OA2,n2,"ДОПКЛ",GetFieldS(OA1,n1,"ДОПКЛ"));
     n2=PutFieldS(OA2,n2,"ПРИЗН",Призн_);
     n2=PutFieldS(OA2,n2,"ПРИМЕЧ",GetFieldS(OA1,n1,"ПРИМЕЧ"));
     for y=1..yy do
      n2=PutFieldS(OA2,n2,"СЧДЕБ"+Str(y),БК_+СчД+Str(y)+"5."+КОСГУ_);
      n2=PutFieldS(OA2,n2,"СЧКРЕ"+Str(y),БК_+СчК+Str(y)+"3."+КОСГУ_);
     od;
    else
     n2=z;
  fi;
  for y=1..yy do
   n2=PutFieldN(OA2,n2,"СУМ"+Str(y),GetFieldN(OA2,n2,"СУМ"+Str(y))+GetFieldN(OA1,n1,"СУМ"+Str(y)));
  od;
 od;
 CloseWorkArea(OA1);
 CloseWorkArea(OA2);
end;

Proc Импорт2009;
var OWA_S,n2_S,nr1_s,nr2_s,OWA_T,nr1_t,z,yyyy:I;
var Rec:Record;
var КБК_,КСГУ_:S;
 OWA_S=OpenWorkArea(SelfCrd,"","UKey="+RecordToString(РР));
 OWA_T=OpenWorkArea("РПО_РР_ВХ","","1=0");
 Try
  nr1_s=Records(OWA_S);
  if nr1_s=0: Message("Расходное расписание №"+НомРР+" не найдено",mtError); Exit; fi;
  SetFilter(OWA_T,"not РБС_ПБС and НОМЕРДОК='"+НомРР+"'"+" and ДАТАДОК>="+DateToString(Dat(1,1,GetFieldI(OWA_S,1,"ГОДДОК"))));
  nr1_t=Records(OWA_T);
  if not nr1_t=0:
     Message("Расходное расписание №"+НомРР+" уже существует в картотеке поступивших расходных расписаний",mtError); 
     Rec=GetRecordKey(OWA_T,1); 
     OpenBlank("ДОКУМЕНТЫ.ЛБО.РР_ВХ",True,Rec);
     Exit; 
  fi;
  --Проверяем существование счетов
  Раб.КСА.Начать;
  ПроверитьСчета(OWA_S,"Ассигн");
  ПроверитьСчета(OWA_S,"ЛБО");
  ПроверитьСчета(OWA_S,"ПОФ");
  if Раб.КСА.Закончить(False): Message("Добавление новых счетов завершено"); fi;
  --Проверяем существование счетов
  BeginChanging(OWA_T);
  Try
   z=InsertRecord(OWA_T);
   Rec=GetRecordKey(OWA_T,z);
   z=PutFieldI(OWA_T,z,"ГОДДОК",GetFieldI(OWA_S,1,"ГОДДОК"));
   z=PutFieldI(OWA_T,z,"НОМЕР",GetFieldI(OWA_S,1,"НОМЕР"));
   z=PutFieldS(OWA_T,z,"НОМЕРДОК",GetFieldS(OWA_S,1,"НОМЕРДОК"));
   z=PutFieldD(OWA_T,z,"ДАТАДОК",GetFieldD(OWA_S,1,"ДАТАДОК"));
   z=PutFieldR(OWA_T,z,"РБС",GetFieldR(OWA_S,1,"РБС"));
   z=PutFieldR(OWA_T,z,"РБС_БАНК",GetFieldR(OWA_S,1,"РБС_БАНК"));
   z=PutFieldS(OWA_T,z,"ГЛАВА",GetFieldS(OWA_S,1,"ГЛАВА"));
   z=PutFieldS(OWA_T,z,"ГРБС",GetFieldS(OWA_S,1,"ГРБС"));
   z=PutFieldR(OWA_T,z,"ПБС",GetFieldR(OWA_S,1,"ПБС"));
   z=PutFieldR(OWA_T,z,"ПБС_БАНК",GetFieldR(OWA_S,1,"ПБС_БАНК"));
   z=PutFieldS(OWA_T,z,"ПБС_ПРИЗНЛС",Раб.Бюджет2005.БанкВПризн(GetFieldR(OWA_S,1,"ПБС_БАНК")));
   z=PutFieldD(OWA_T,z,"ДАТАВД",GetFieldD(OWA_S,1,"ДАТАВД"));
   z=PutFieldS(OWA_T,z,"СПЕЦУКАЗ",GetFieldS(OWA_S,1,"СПЕЦУКАЗ"));
   z=PutFieldS(OWA_T,z,"СПЕЦУКАЗ2",GetFieldS(OWA_S,1,"СПЕЦУКАЗ2"));
   z=PutFieldS(OWA_T,z,"КОДСПЕЦУКАЗ",GetFieldS(OWA_S,1,"КОДСПЕЦУКАЗ"));
   z=PutFieldS(OWA_T,z,"ДОЛЖНРУК",GetFieldS(OWA_S,1,"ДОЛЖНРУК"));
   z=PutFieldS(OWA_T,z,"ФИОРУК",GetFieldS(OWA_S,1,"ФИОРУК"));
   z=PutFieldS(OWA_T,z,"ДОЛЖНИСП",GetFieldS(OWA_S,1,"ДОЛЖНИСП"));
   z=PutFieldS(OWA_T,z,"ФИОИСП",GetFieldS(OWA_S,1,"ФИОИСП"));
   z=PutFieldS(OWA_T,z,"ТЕЛИСП",GetFieldS(OWA_S,1,"ТЕЛИСП"));
   z=PutFieldD(OWA_T,z,"ДАТАПОДПИСИ",GetFieldD(OWA_S,1,"ДАТАПОДПИСИ"));
   z=PutFieldS(OWA_T,z,"АССИГН_ТИПКБК",GetFieldS(OWA_S,1,"АССИГН_ТИПКБК"));
   z=PutFieldD(OWA_T,z,"ДАТАВД1",GetFieldD(OWA_S,1,"ДАТАВД1"));
   z=PutFieldD(OWA_T,z,"ДАТАВД2",GetFieldD(OWA_S,1,"ДАТАВД2"));
   z=PutFieldD(OWA_T,z,"ДАТАВД3",GetFieldD(OWA_S,1,"ДАТАВД3"));
   z=PutFieldL(OWA_T,z,"РБС_ПБС",False);
   z=PutFieldI(OWA_T,z,"СЕКРЕТ",GetFieldI(OWA_S,1,"СЕКРЕТ"));
   z=PutFieldL(OWA_T,z,"ПРОВОДИТЬ",False);
   z=PutFieldS(OWA_T,z,"РПО_КЛЮЧ",GetFieldS(OWA_S,1,"РПО_КЛЮЧ"));
   z=PutFieldL(OWA_T,z,"CLOSEDMODFOB",False);
   ИмпортРаздела(OWA_S,OWA_T,"Ассигн");
   ИмпортРаздела(OWA_S,OWA_T,"ЛБО");
   ИмпортРаздела(OWA_S,OWA_T,"ПОФ");
   EndChanging(OWA_T);
  Except
   CancelChanging(OWA_T);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA_S);
  CloseWorkArea(OWA_T);
 end;
 Message("Импорт успешно завершен");
 OpenBlank("ДОКУМЕНТЫ.ЛБО.РР_ВХ",True,Rec);
end;
--Процедуры и функции -------------
--
--Обработчики событий полей шаблона-----
Func YYYY_onEnter(FieldName: S; Iter: I): L;
var  i:I;
 ClearVariable(Buf);
 for i=1..5 do Buf[i]=Str(Year(ToDay)+i-4); od;
 i=Alternate("Текущий год",Buf,30,4,12);
 if not i=0: 
    YYYY=Int(Buf[i]); 
 fi;
 РР=nil;
 ^False;
end;

Func ПБС_onEnter (Field:S; Iter:I):L;
var Rec:Record;
 Rec=OpenCardFile("КОНТРАГЕНТ","НАШЕ",ПБС);
 if Rec=nil: ^False; fi;
 ПБС=Rec;
 РР=nil;
 ^False;
end;

Func НомРР_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec:Record;
var F:S;
 if YYYY=0: Message("Выберите текущий год",mtError); Template.Field="YYYY"; ^False; fi;
 if ПБС=nil: Message("Выберите получателя",mtError); Template.Field="НаимПБС"; ^False; fi;
 if YYYY<2009:
    F="АННУЛИРОВАТЬ=False and ПБС="+RecordToString(ПБС);
   else
    F="Проводить and not Аннул and ПБС="+RecordToString(ПБС)+" and ГодДок="+Str(YYYY)+" and Создан=2";
 fi;
 Rec=OpenCardFile(SelfCrd,F,РР);
 if Rec=nil: ^False; fi;
 РР=Rec;
 ^False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnИмпорт_OnClick(Sender: String);
 if YYYY=0: Message("Выберите текущий год",mtError); Template.Field="YYYY"; Exit; fi;
 if ПБС=nil: Message("Выберите получателя"); Template.Field="НаимПБС"; Exit; fi;
 if РР=nil: Message("Выберите расходное расписание"); Template.Field="НомРР"; Exit; fi;
 if YYYY<2009:
    Импорт;
   else
    Импорт2009;
 fi;
end;
--Обработчики событий объектов шаблона-----
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 if ПБС=nil:
    ПБС=Раб.Бюджет2005.НашРекв;
 fi;
end;
--Обработчики событий шаблона -----
--



Конец
