-- Шаблон создан мстером бланков
-- 29.05.2000 14:38:01
--
БланкСШаблоном "Поступившее извещения", РЕДАКТОР РПО_Извещения_Вх;

var НоваяЗапись:L=(CurrentState=crdusInserted);

fQCMF:L;

var УпрН:L;
var НастрПоУмолч:S="Настройка по умолчанию";
var НастрЗакр:S="Закрыть настройку";

var Def_МаскаСчДеб:S="*.?.104.??.*|*.?.304.04.*|*.?.401.20.241|*.?.401.20.251";
var Def_МаскаПолучСчКре:S="*.?.104.??.*|*.?.304.04.*|*.?.401.10.151|*.?.401.10.180";

var recОтправ:Record;
var Отправ_:S;
var recПолуч:Record;
var Получ_:S;
var ЗначНомОрд:S;
var ЗначНомОрд_:S=SubStr(ЗначНомОрд,4,255);
var ЗначСодерж:S;
var МаскаСчДеб:S=[Def_МаскаСчДеб];
var ЗначПризн:S;
var МаскаПолучСчКре:S=[Def_МаскаПолучСчКре];
var fДубликат:L;
var fДубликат_:S=if(fДубликат,"Да","Нет");

КолКопий:I=[2];

var ОтправИмя_:S=ОтправРекв.КорИмя+"   "+ОтправРекв.ПочтАдрес;

var A:S=if(Проводить,"","+");
var D:S=if(Проводить,"","-");
var ПолучИмя_:S=ПолучРекв.КорИмя+"   "+ПолучРекв.ПочтАдрес;
var ПолучИмяКопия_[]:S=Получ[$].Рекв.КорИмя+"	"+Получ[$].Рекв.ПочтАдрес;

var НомОрд_:S=SubStr(НомОрд,4,255);

var A1:S=A; 
var D1:S=D; 
var AA1:S=if(Проводить,"","++");

var ПолучПризн_[]:S=Позиции[$].ПолучПризн;
var ПолучПризнДеб_[]:S=Позиции[$].ПолучПризнДеб;
var ПолучПризнКре_[]:S=Позиции[$].ПолучПризнКре;

var ИтогоСум:N=SumOfArray(Позиции[].Сум,Позиции);
var ИтогоПолучСум:N=SumOfArray(Позиции[].ПолучСум,Позиции);

var РасчетОбр:S=if(Проводить,"","Рассчитать обороты");

var Обр[]:S=if($=1,"Обороты в журнал операций","");

var ИсклПризн:S="ПБС.*|ЖО.*";
var recCurrent:Record;

var Buf[]:S;
var BufN[]:N;

-- массивы для функции [ИнициализироватьУсловия] --
var УслДЕБ[]	   :String;
var УслКРЕ[]	   :String;
var УслАНА[]	   :String;
---------------------------------------------------

---------------------------------------------------
--     оформление секции СекцияАвтоДОК		 --
var СекцияАвтоДОК_УПР:L=ДНФАid<>0 or RECCRD<>0;
ПоказыватьИменаГруппНФА:l;
ТипСвертки:i;
func ИмяТипаСвертки(i:i):s;
  if i=0:^'0 без свертки(по умолчанию)';fi;
  if i=1:^'1 по счету НФА (101)';fi;
  if i=2:^'2 по счету и субсчету НФА (101.04)';fi;
  if i=3:^'3 по счету и субсчету и 1 группе НФА (101.04.ПОСУДА)';fi;
  if i=4:^'4 по НФА (в разрезе наименований)';fi;
  if i=5:^'5 по НФА + ИНВ номеру';fi;
  if i=6:^'6 без свертки(с разбитием по аналитике)';fi;
  ^'Не определен!';
end;
var ВыводТипСвертки	     :s=ИмяТипаСвертки(ТипСвертки);
var Btn_К_ОСН_ДОК	     :s='Перейти к основному документу';
var Btn_РасчетАВТО_ДОК	     :s=if(Проводить,'','Заполнить из основного документа');
var Btn_ТипСвертки	     :s='Способ заполнения';
--     оформление секции СекцияАвтоДОК		 --
---------------------------------------------------

cbПроводить  :Object;
btnДВозврат2 :Object;
edДВозврат2  :Object;
btnЗакрыть   :Object;
btnПечать    :Object;
edКолКопий   :Object;
btnНастр     :Object;
cbЗакрытьДок :Object;

S1 : Section;
S3 : Section;
S4 : Section;
S5 : Section;
S6 : Section;
S7 : Section;
S8 : Section;
S9 : Section;
S10: Section;
S11: Section;
S12: Section;
S13: Section;
СекцияАвтоДОК:Section;

var nS:I=12;

hНомОрд:S;
var hСчДеб:S;
var hСчКре:S;
var hПризн:S;
hПолучДолжИспол:S;
hПолучФИОИспол:S;

var BufField[]:S;
var BufColorBg[]:I;
var BufColorFo[]:I;
var FlagInit:L;

var SelfCrd:S="РПО_Извещения_Вх";
var SelfCfg:S="ТББ.ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ВХ_69Н.000.cfg";
var SelfBln:S="ДОКУМЕНТЫ.ЦЕНТРСНАБ.ИЗВЕЩ_ВХ_69Н";

var НастрGUID:S;

var NumSplitVoc:I=5;

var RefreshTurnOnRead:L;
-----------------------------------
--------- УМЦ----------------------
УМЦ:L;
var WA_РПО_СТАТУС_ДОК:i;
var WA_РПО_СТАТУС_ДОК_open:l;

var УМЦ_ТТН	 []:s;
var УМЦ_ЗАБ	 []:s;
var УМЦ_ЗАБАЛАНС_СУММА_ПРИХ	 []:n=if(УМЦ_ТТН[$]<>'',Оборот('+'+УМЦ_ЗАБ[$]+'/(ЗАБАЛАНС|00Z){'+УМЦ_ТТН[$]+'}',1.1.100,ДатаИзв+1),0);
var УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_ПРИХ []:n=ПОЗИЦИИ[$].ПолучСум-УМЦ_ЗАБАЛАНС_СУММА_ПРИХ[$];
var УМЦ_ЗАБАЛАНС_СУММА_РАСХ	 []:n=if(УМЦ_ТТН[$]<>'',-Оборот('-'+УМЦ_ЗАБ[$]+'/(ЗАБАЛАНС|00Z){'+УМЦ_ТТН[$]+'}',1.1.100,ДатаИзв+1),0);
var УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_РАСХ []:n=ПОЗИЦИИ[$].ПолучСум-УМЦ_ЗАБАЛАНС_СУММА_РАСХ[$];
var УМЦ_БАЛАНС_СУММА		 []:n=if(УМЦ_ТТН[$]<>'',Оборот('+'+ПОЗИЦИИ[$].ПолучСчДеб+'/'+ПОЗИЦИИ[$].ПолучСчКре+'{'+УМЦ_ТТН[$]+'}',1.1.100,ДатаИзв+1),0);
var УМЦ_БАЛАНС_ОТКЛОНЕНИЕ	 []:n=ПОЗИЦИИ[$].ПолучСум-УМЦ_БАЛАНС_СУММА[$];

var УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_ПРИХ_ИТОГ :n=СуммаМассива(УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_ПРИХ, Позиции);
var УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_РАСХ_ИТОГ :n=СуммаМассива(УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_РАСХ, Позиции);
var УМЦ_БАЛАНС_ОТКЛОНЕНИЕ_ИТОГ	      :n=СуммаМассива(УМЦ_БАЛАНС_ОТКЛОНЕНИЕ, Позиции);

var УМЦ_KEY		    []:s;
var УМЦ_Статус_ПОЗИЦИИ	    []:i;
var УМЦ_Статус_ДОП1_ПОЗИЦИИ []:s;
var УМЦ_Статус_ДОП2_ПОЗИЦИИ []:s;
var УМЦ_Статус_ДОП3_ПОЗИЦИИ []:s;

func НайтиТТН(Номер:s;датадок:s;ИНН:s;КПП:s;ИМЯПОСТАВЩИКА:s):s;--ТТН_ВХ.2012.04207.05248_ОТ_27_08
 var ss,ttn,ss1,ss2:s;
 var гг,t,z,ln,ln1:i;
 Номер=up(trim(Номер));if length(Номер)=0:^'';fi;
 датадок=trim(датадок);if length(датадок)=0:^'';fi;
 ss=ВыделитьСлово(3,датадок,'.');
 гг=int(ss);
 ss='ТТН_ВХ.'+ss+'.*_ОТ_'+ВыделитьСлово(1,датадок,'.')+'_'+ВыделитьСлово(2,датадок,'.');
 ClearVariable(Buf);
 ИМЯПОСТАВЩИКА=trim(up(ИМЯПОСТАВЩИКА));
 ln=Length(ИМЯПОСТАВЩИКА);
 ln1=Length(Номер);
 for sign ttn=ss do
   ss1=up(Name_A(ttn));
   if ln1>0:
      if pos('№'+Номер+' ',ss1)>0:^ttn;fi;
   fi;
   if ln>0:
      if pos(ИМЯПОСТАВЩИКА,ss1)>0:
	AddInArray(Buf,true,false,ttn);
      fi;
    | true:
	AddInArray(Buf,true,false,ttn);
   fi;
 od;
 z=lengthofarray(buf);
 for t=1..z do
  buf[t]=buf[t]+'--'+Name_A(buf[t]);
 od;
^'';
end;

Proc ЗаполнитьТТН;
 var r,p:i;
 var ss,ndoc,ddoc,name_K:s;
 ClearVariable(УМЦ_ТТН);
 for r=1..позиции do
  УМЦ_ТТН[r]=НайтиТТН(ПОЗИЦИИ[r].НОМДОК1,ПОЗИЦИИ[r].ДАТДОК1,ПОЗИЦИИ[r].ИНН,ПОЗИЦИИ[r].КПП,ПОЗИЦИИ[r].НАИМ);
  if УМЦ_ТТН[r]='':
     if match(ПОЗИЦИИ[r].Содерж,'* №* от ??.??.???? *'):
	ss=trim(up(ПОЗИЦИИ[r].Содерж));
	p=pos(' №',ss);
	ss=SubStr(ss,p+2,255);
	p=pos(' ОТ ',ss);
	ndoc=trim(SubStr(ss,1,p-1));
	ss=SubStr(ss,p+4,255);
	ddoc=SubStr(ss,1,10);
	УМЦ_ТТН[r]=НайтиТТН(ndoc,ddoc,'','','');
     fi;
  fi;
--  Содерж
--  trace(УМЦ_ТТН[r]);

  ss=ВыделитьСлова(6,2,ПОЗИЦИИ[r].ПолучСчДеб,'.');
  if не соотв(ss,'106.??'):
     ss=ВыделитьСлова(6,2,ПОЗИЦИИ[r].ПолучСчКре,'.');
  fi;
  ss='ЗАБ.22.'+SubStr(ss,1,4)+'0'+SubStr(ss,6,1);
  УМЦ_ЗАБ[r]=ss;
 od;
end;


Proc УМЦ_ClearVar;
  ClearVariable(УМЦ_KEY);
  ClearVariable(УМЦ_Статус_ПОЗИЦИИ);
  ClearVariable(УМЦ_Статус_ДОП1_ПОЗИЦИИ);
  ClearVariable(УМЦ_Статус_ДОП2_ПОЗИЦИИ);
  ClearVariable(УМЦ_Статус_ДОП3_ПОЗИЦИИ);
  ClearVariable(УМЦ_ТТН     );
  ClearVariable(УМЦ_ЗАБ     );
  ClearVariable(УМЦ_ЗАБАЛАНС_СУММА_ПРИХ     );
  ClearVariable(УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_ПРИХ);
  ClearVariable(УМЦ_ЗАБАЛАНС_СУММА_РАСХ     );
  ClearVariable(УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_РАСХ);
  ClearVariable(УМЦ_БАЛАНС_СУММА       );
  ClearVariable(УМЦ_БАЛАНС_ОТКЛОНЕНИЕ  );
end;

Proc УМЦ_OpenWA_РПО_СТАТУС_ДОК;
  if not WA_РПО_СТАТУС_ДОК_open:
     try
       WA_РПО_СТАТУС_ДОК=OpenWorkArea('РПО_СТАТУС_ДОК','GUID_SUBTAB','1=0');
       WA_РПО_СТАТУС_ДОК_open=true;
     except
       УМЦ=false;
       WA_РПО_СТАТУС_ДОК_open=false;
       message('Ошибка при работе с картотекой РПО_СТАТУС_ДОК',mtError);
     end;
  fi;
end;
Proc УМЦ_CloseWA_РПО_СТАТУС_ДОК;
  if WA_РПО_СТАТУС_ДОК_open:
     try
       CloseWorkArea(WA_РПО_СТАТУС_ДОК);
       WA_РПО_СТАТУС_ДОК_open=false;
     except
       УМЦ=false;
       WA_РПО_СТАТУС_ДОК_open=false;
       message('Ошибка при работе с картотекой РПО_СТАТУС_ДОК',mtError);
     end;
  fi;
end;
Proc УМЦ_ReadSubTabWA_РПО_СТАТУС_ДОК(SubTab:s);
 var rs,j,CurIter:i;
 var CurGUID,tmps1,tmps2:s;
 УМЦ_ClearVar;
 if WA_РПО_СТАТУС_ДОК_open:
    rs=records(WA_РПО_СТАТУС_ДОК);
    CurGUID='';
    CurIter=0;
    for j=1..rs do
      tmps1=GetFieldS(WA_РПО_СТАТУС_ДОК,j,'CRD_SUBTAB');
      if tmps1=SubTab:
	 tmps1=GetFieldS(WA_РПО_СТАТУС_ДОК,j,'GUID_SUBTAB');
	 if CurGUID<>tmps1:
	    CurGUID=tmps1;
	    CurIter=SearchInArray(ПОЗИЦИИ[].GUID,CurGUID);
	 fi;
	 if CurIter>0:
	    УМЦ_KEY		   [CurIter]=GetFieldS(WA_РПО_СТАТУС_ДОК,j,'KEY');
	    УМЦ_Статус_ПОЗИЦИИ	   [CurIter]=GetFieldI(WA_РПО_СТАТУС_ДОК,j,'СТАТУС');
	    УМЦ_Статус_ДОП1_ПОЗИЦИИ[CurIter]=GetFieldS(WA_РПО_СТАТУС_ДОК,j,'СТАТУС_ДОП1');
	    УМЦ_Статус_ДОП2_ПОЗИЦИИ[CurIter]=GetFieldS(WA_РПО_СТАТУС_ДОК,j,'СТАТУС_ДОП2');
	    УМЦ_Статус_ДОП3_ПОЗИЦИИ[CurIter]=GetFieldS(WA_РПО_СТАТУС_ДОК,j,'СТАТУС_ДОП2');
	 fi;
      fi;
    od;
 fi;
end;

func УМЦ_SetFilterWA_РПО_СТАТУС_ДОК:s;
var f:s;
  f='RECCRD='+str(recordtointeger(current));
  f=f+' AND CRD="'+up(SelfCrd)+'"';
  f=f+' AND СТАТУС_КОД="УМЦ"';
--  f=f+' AND BLNCRD="'+up(SelfBln)+'"';
  if WA_РПО_СТАТУС_ДОК_open:
     SetFilter(WA_РПО_СТАТУС_ДОК,f);
     ^f;
  fi;
  ^'';
end;

Proc УМЦ_Оформление(ВидСтандарт:l);
var s,c,r,cc,rr,n,t:i;
var Obj: Object;
var Field:S;
  ЗаполнитьТТН;
  if FindObject("S9",Obj):
     if ВидСтандарт:
	Obj.ColsCount=13;
      | true:

	rr=asInteger(Obj.RowsCount);
	cc=asInteger(Obj.ColsCount);
	if cc>13:Obj.ColsCount=13;cc=13;fi;
	if cc=13:Obj.ColsCount=17;cc=17;fi;
	Obj.Column(14,ColWidth,15);
	Obj.Cell(1,14,CellBorder,'1,0,1,0');
	Obj.Cell(2,14,CellBorder,'1,0,1,0');
	Obj.Column(14,colprinted,false);
	for t=15..17 do
	  for r=1..2 do
	      Obj.Cell(r,t,CellBorder,'1,1,1,1');
	      Obj.Cell(r,t,CellFieldType,cftNumericField);
	      Obj.Cell(r,t,CellFormat,',##0.00;;-');
	      Obj.Cell(r,t,CellAlignment,1);
	      Obj.Cell(r,t,CellEventOnEnter,'УМЦ_ПриВходе');
	  od;
	  Obj.Cell(1,t,CellFontColor,coWhite);
	  Obj.Cell(1,t,CellBgColor,coTeal   );
	  Obj.Cell(2,t,CellFontColor,coRed);
	  Obj.Column(t,colprinted,false);-- не печатать столбец;
--	    Obj.Column(t,18198,false);-- не печатать столбец;
	od;
--				   S13
	Obj.Cell(1,15,CellContents,'УМЦ_ЗАБАЛАНС_СУММА_ПРИХ');
	Obj.Cell(2,15,CellContents,'УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_ПРИХ');
	Obj.Cell(1,16,CellContents,'УМЦ_ЗАБАЛАНС_СУММА_РАСХ');
	Obj.Cell(2,16,CellContents,'УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_РАСХ');
	Obj.Cell(1,17,CellContents,'УМЦ_БАЛАНС_СУММА');
	Obj.Cell(2,17,CellContents,'УМЦ_БАЛАНС_ОТКЛОНЕНИЕ');
     fi;
  fi;
  if FindObject("S8",Obj):
     if ВидСтандарт:
	Obj.ColsCount=13;
      | true:
	rr=asInteger(Obj.RowsCount);
	cc=asInteger(Obj.ColsCount);
	if cc>13:Obj.ColsCount=13;cc=13;fi;
	if cc=13:Obj.ColsCount=17;cc=17;fi;
	Obj.Column(14,ColWidth,15);
	Obj.Column(14,colprinted,false);
	for t=1..4 do
	  Obj.Cell(t,14,CellBorder,'1,0,1,0');
	od;
	for t=15..17 do
	  for r=1..4 do
	      Obj.Cell(r,t,CellAlignment,2);
	      Obj.Cell(r,t,CellBorder,'1,1,1,1');
	  od;
	  Obj.Cell(2,t,CellContents,'СУММА');
	  Obj.Cell(3,t,CellContents,'ОТКЛОНЕНИЕ');
	  Obj.Cell(4,t,CellContents,str(t-7));
	  Obj.Column(t,colprinted,false);-- не печатать столбец;
	  Obj.Cell(1,t,CellBgColor,coLtGray);
	od;
	Obj.Cell(1,15,CellContents,'ЗАБАЛАНС +');
	Obj.Cell(1,16,CellContents,'ЗАБАЛАНС -');
	Obj.Cell(1,17,CellContents,'БАЛАНС');
--	  Obj.row(1,18208,false);
     fi;

  fi;
  if FindObject("S13",Obj):
     if ВидСтандарт:
	Obj.ColsCount=12;
      | true:
	rr=asInteger(Obj.RowsCount);
	cc=asInteger(Obj.ColsCount);
	if cc>12:Obj.ColsCount=12;cc=12;fi;
	if cc=12:Obj.ColsCount=16;cc=16;fi;
	Obj.Column(13,ColWidth,15);
	Obj.Column(13,colprinted,false);
	Obj.Cell(1,13,CellBorder,'1,0,1,0');
	for t=2..4 do
	  Obj.Cell(t,13,CellBorder,'0,0,0,0');
	od;
	for t=14..16 do
	  Obj.Cell(1,t,CellBorder,'1,1,1,1');
	  Obj.Cell(1,t,CellFieldType,cftNumericField);
	  Obj.Cell(1,t,CellFormat,',##0.00;;-');
	  Obj.Cell(1,t,CellAlignment,1);
	  Obj.Cell(1,t,CellEventOnEnter,'УМЦ_ПриВходе');
	  Obj.Cell(1,t,CellFontColor,coRed);
	  Obj.Column(t,colprinted,false);-- не печатать столбец;

	od;
	Obj.Cell(1,14,CellContents,'УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_ПРИХ_ИТОГ');
	Obj.Cell(1,15,CellContents,'УМЦ_ЗАБАЛАНС_ОТКЛОНЕНИЕ_РАСХ_ИТОГ');
	Obj.Cell(1,16,CellContents,'УМЦ_БАЛАНС_ОТКЛОНЕНИЕ_ИТОГ');
--	  Obj.row(1,18208,false);
     fi;

  fi;

end;

Proc УМЦ_OnVerify;
end;

Proc УМЦ_OnRead;
     УМЦ_OpenWA_РПО_СТАТУС_ДОК;
     УМЦ_SetFilterWA_РПО_СТАТУС_ДОК;
     if not FlagInit:
	УМЦ_Оформление(not УМЦ);
     fi;
end;
Func УМЦ_ПриВходе(FieldName: String; Iter: Integer): logical;
var t,p:i;
var ss,ndoc,ddoc,name_K:s;
if УМЦ_ТТН[Iter]='':
   if Вопрос(Позиции[Iter].Содерж, "Нет соответствия для ^M"+Позиции[Iter].Содерж,  "Игнорировать;Найти", mtConfirmation) = 2:
      УМЦ_ТТН[Iter]=НайтиТТН(ПОЗИЦИИ[Iter].НОМДОК1,ПОЗИЦИИ[Iter].ДАТДОК1,ПОЗИЦИИ[Iter].ИНН,ПОЗИЦИИ[Iter].КПП,ПОЗИЦИИ[Iter].НАИМ);
      if УМЦ_ТТН[Iter]='':
	 if match(ПОЗИЦИИ[Iter].Содерж,'* №* от ??.??.???? *'):
	    ss=trim(up(ПОЗИЦИИ[Iter].Содерж));
	    p=pos(' №',ss);
	    ss=SubStr(ss,p+2,255);
	    p=pos(' ОТ ',ss);
	    ndoc=trim(SubStr(ss,1,p-1));
	    ss=SubStr(ss,p+4,255);
	    ddoc=SubStr(ss,1,10);
	    УМЦ_ТТН[Iter]=НайтиТТН(ndoc,ddoc,'','','');
	 fi;
      fi;
      if УМЦ_ТТН[Iter]='':
	 t=AlternateTree(Позиции[Iter].Содерж,buf,-1,1,10,'','Признак','Описание');
	 if t>0:
	    УМЦ_ТТН[Iter]=Trim(ВыделитьСлово(1,buf[t],'--'));

	 fi;
      fi;
   fi;
fi;
^false;
end;
Proc ФлУМЦ_ПриИзменении(Отправитель: Строка);
 УМЦ_OnRead;
end;

--------- УМЦ----------------------
-----------------------------------
--
--Процедуры и функции -------------			      
Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать  (SelfBln,0,0,"",НастрGUID):
    Раб.Настр.Добавить("recОтправ","R");
    Раб.Настр.Добавить("Отправ_","S");
    Раб.Настр.Добавить("recПолуч","R");
    Раб.Настр.Добавить("Получ_","S");
    Раб.Настр.Добавить("ЗначСодерж","S");
    Раб.Настр.Добавить("МаскаСчДеб","S");
    Раб.Настр.Добавить("МаскаПолучСчКре","S");
    Раб.Настр.Добавить("ЗначПризн","S");
    Раб.Настр.Добавить("fДубликат","L");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
	  Flag=ExecuteFuncL("НастрПоУмолч_onEnter","Натр",1);
       fi;
    fi;
 fi;
end;

Proc Инициализация;
var Obj:Object;
var s,r,rr,c,cc,n,l,bgColor:i;
var Field:S;
 ClearVariable(BufField);
 ClearVariable(BufColorBg);
 ClearVariable(BufColorFo);
 for s=1..nS do
  if FindObject("S"+Str(s),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 ..rr  do
      for c=1 ..cc  do
       Try
	BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
	if BgColor=coAqua or BgColor=coTeal:
	   Field=asString(Obj.Cell(r,c,CellContents,"",False));
	   if SearchInArray(BufField,Field,True)=-1:
	      n=InsertInArraySort(BufField,Field);
	      InsertInArray(BufColorBg,n,BgColor);
	   fi;
	fi;
       Except
       end;
      od;
     od;
  fi;
 od;
 --Фрейм Получ может быть скрыт
 if SearchInArray(BufField,"ПолучИмяКопия_",True)=-1:
    n=InsertInArraySort(BufField,"ПолучИмяКопия_");
    InsertInArray(BufColorBg,n,coTeal);
 fi;
 --
 l=LengthOfArray(BufField);
 for n=1..l do
  if BufColorBg[n]=coTeal: BufColorFo[n]=coWhite;
    |True: BufColorFo[n]=coBlack;
  fi;
 od;
end;

Proc Оформление;
var s,c,r,cc,rr,n:i;
var Obj: Object;
var Field:S;
 edДВозврат2.Enabled=not Проводить;
 for s=1..nS do
  if FindObject("S"+Str(s),Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 .. rr do
      for c=1 .. cc do
       Try
	Field=asString(Obj.Cell(r,c,CellContents,"",False));
	n=SearchInArray(BufField,Field,True);
	if not n=-1:
	   if Проводить:
	      Obj.Cell(r,c,CellFontColor,coBlack);
	      Obj.Cell(r,c,CellBgColor,coTransparent);
	     else
	      Obj.Cell(r,c,CellFontColor,BufColorFo[n]);
	      Obj.Cell(r,c,CellBgColor,BufColorBg[n]);
	   fi;
	   Obj.Cell(r,c,CellReadOnly,Проводить);
	fi;
       Except
       end;
      od;
     od;
  fi;
 od;
end;

Proc ОткрНастр (Flag:L);
 УпрН=Flag;
 cbПроводить.Visible=not Flag;
 btnДВозврат2.Visible=not Flag;
 edДВозврат2.Visible=not Flag;
 btnЗакрыть.Visible=not Flag;
 btnПечать.Visible=not Flag;
 edКолКопий.Visible=not Flag;
 btnНастр.Visible=not Flag;
 cbЗакрытьДок.Visible=not Flag and Раб.Бюджет2005.Сетевая;
end;

Proc НеПустаяТаблица;
 if Позиции<1: InsertFrame(Позиции,1); fi;
end;

Proc УдалитьПустыеСтроки;
var Iter:i;
 Iter=1;
 While Iter<=Позиции do
  if Позиции[Iter].Содерж=""	 and
     Позиции[Iter].СчДеб=""	 and
     Позиции[Iter].СчКре=""	 and
     Позиции[Iter].Сум=0	 and
     Позиции[Iter].ПолучСчДеб="" and
     Позиции[Iter].ПолучСчКре="" and
     Позиции[Iter].ПолучПризн=""      and
     Позиции[Iter].ПолучПризнДеб=""   and
     Позиции[Iter].ПолучПризнКре=""   and
     Позиции[Iter].ПолучСум=0: DeleteFrame(Позиции,Iter);
    else
     Iter=Iter+1;
  fi;
 od;
end;

Func УникальностьПолуч (Rec:Record; Iter:I):I;
var n:i;
 for n=1..Получ do
  if Получ[n].РЕКВ=Rec and not n=Iter: ^n; fi;
 od;
 ^0;
end;

Proc ЗаполнитьРекв (Prefix:S; Rec: Record);
var tmp:S;
 PutVariableR(Prefix+"Рекв",Rec);
 if Prefix="Отправ" or Prefix="Получ":
    RefreshAna;
    tmp=CardFileRecSign("Контрагент","Признак","ПБС",Rec,"");
    if Name_A(tmp)=" ": tmp=""; fi;
    PutVariableS(Prefix+"Признак",tmp);
 fi;
 if Prefix="Получ":
    ПолучФИОРук=ПолучРекв.ФИОРук;
    ПолучФИОБух=ПолучРекв.ФиоБух;
 fi;
end;

Proc ПолучитьДопАн(Iter:I);
var Справ,ПризнБК,ПризнКОСГУ,ТипКБК,tmp:S;
 if not Name_S(Позиции[Iter].ПолучСчДеб)=" " and not Name_S(Позиции[Iter].ПолучСчКре)=" ":
    Справ=Раб.Бюджет2005.СписокСправ(Позиции[Iter].ПолучСчДеб+"|"+Позиции[Iter].ПолучСчКре,0,"");
    ТипКБК=Раб.Бюджет2005.ТипКБКСчета(Позиции[Iter].ПолучСчКре);
    ПризнБК="";
    if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|",ТипКБК+".*","")="":
       ПризнБК=ТипКБК;
    fi;
    if not ПризнБК="":
       ПризнБК=ПризнБК+"."+Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].ПолучСчКре,ТипКБК,"БК",False);
       if Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Позиции[Iter].ПолучПризнКре," ","ФКР.*|КД.*|КИФД.*","|")="":
	  Позиции[Iter].ПолучПризн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Позиции[Iter].ПолучПризн," ",ПризнБК,"ФКР.*|КД.*|КИФД.*","|");
	 else
	  Позиции[Iter].ПолучПризнКре=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Позиции[Iter].ПолучПризнКре," ",ПризнБК,"ФКР.*|КД.*|КИФД.*","|");
       fi;
    fi;
    if not Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Справ,"|","КОСГУ.*","")="":
       ПризнКОСГУ="КОСГУ."+Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].ПолучСчКре,ТипКБК,"КОСГУ",False);
       if not ПризнКОСГУ="КОСГУ.":
	  tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Позиции[Iter].ПолучПризнКре," ","КОСГУ.*","");
	  if tmp="":
	     tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Позиции[Iter].ПолучПризн," ","КОСГУ.*","");
	     if not Match(tmp,ПризнКОСГУ+"!"):
		Позиции[Iter].ПолучПризн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Позиции[Iter].ПолучПризн," ",ПризнКОСГУ,"КОСГУ.*","|");
	     fi;
	    else
	     if not Match(tmp,ПризнКОСГУ+"!"):
		Позиции[Iter].ПолучПризнКре=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Позиции[Iter].ПолучПризнКре," ",ПризнКОСГУ,"КОСГУ.*","|");
	     fi;
	  fi;
       fi;
    fi;
 fi;
end;

Proc ОбновитьПризн(Iter:I);
var tmp:S;
var n1,n2:i;
 if Iter=-1: n1=1; n2=Позиции; else n1=Iter; n2=Iter; fi;
 for Iter=n1..n2 do
  if not Name_S(Позиции[Iter].ПолучСчДеб)=" " and not Name_S(Позиции[Iter].ПолучСчКре)=" ":
     tmp=Раб.Бюджет2005.СписокСправ(Позиции[Iter].ПолучСчДеб+"|"+Позиции[Iter].ПолучСчКре,0,"");
     Позиции[Iter].ПолучПризн=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Позиции[Iter].ПолучПризн," ",tmp,"|");
     Позиции[Iter].ПолучПризнДеб=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Позиции[Iter].ПолучПризнДеб," ",tmp,"|");
     Позиции[Iter].ПолучПризнКре=Раб.Бюджет2005.ПривестиВСоотвНаборСлов(Позиции[Iter].ПолучПризнКре," ",tmp,"|");
     if not ЗначПризн="" and Позиции[Iter].ПолучПризн="" and Позиции[Iter].ПолучПризнДеб="" and Позиции[Iter].ПолучПризнКре="":
	Позиции[Iter].ПолучПризн=ЗначПризн;
     fi;
     ПолучитьДопАн(Iter);
  fi;
 od;
end;

Proc РасчетОборотов;
var Iter,z:I;
var Key:S;
 RefreshTurnOnRead=False;
 ClearVariable(Buf);
 ClearVariable(Обороты);
 УдалитьПустыеСтроки;
 for Iter=1..Позиции do
  Key=Позиции[Iter].СчДеб+"#"+Позиции[Iter].СчКре+"#"+Позиции[Iter].ПолучСчДеб+"#"+Позиции[Iter].ПолучСчКре;
  z=SearchInArray(Buf,Key,True);
  if z=-1:
     z=InsertInArraySort(Buf,Key);
     z=InsertFrame(Обороты,z);
     Обороты[z].СчДеб=Позиции[Iter].СчДеб;
     Обороты[z].СчКре=Позиции[Iter].СчКре;
     Обороты[z].Сум=Позиции[Iter].Сум;
     Обороты[z].СумРуб=Позиции[Iter].СумРуб;
     Обороты[z].ПолучСчДеб=Позиции[Iter].ПолучСчДеб;
     Обороты[z].ПолучСчКре=Позиции[Iter].ПолучСчКре;
     Обороты[z].ПолучСум=Позиции[Iter].ПолучСум;
     Обороты[z].ПолучСумРуб=Позиции[Iter].ПолучСумРуб;
    else
     Обороты[z].Сум=Обороты[z].Сум+Позиции[Iter].Сум;
     Обороты[z].СумРуб=Обороты[z].Сум+Позиции[Iter].СумРуб;
     Обороты[z].ПолучСум=Обороты[z].ПолучСум+Позиции[Iter].ПолучСум;
     Обороты[z].ПолучСумРуб=Обороты[z].ПолучСум+Позиции[Iter].ПолучСумРуб;
  fi;
 od;
end;

Func ПроверитьВозврат:L;
var Iter:i;
 if ДВозврат2<ДатаИзв: Message("Дата ответного извещенияния не можеть быть ранее даты извещения",mtError); Template.Object="edДВозврат2"; ^False; fi;
 for Iter=1..Позиции do
  if Позиции[Iter].ПолучСум=0:
     if EnqOkCancel("Не указанна сумма подтверждения. Игнорировать ?",mtWarning)=cmCancel: Template.Field="ПолучСум"; Template.Frame=Iter; ^False; fi;
  fi;
 od;
 ^True;
end;

Func Проверить:L;
var Iter:i;
var tmp:S;
var Transit:L;
 RefreshAna;
 Transit=False;
 if ДВозврат2=1.1.100: Message("Укажите дату операции",mtError); Template.Object="edДВозврат2"; ^False; fi;
 if НомерБум="": Message("Заполните номер извещения",mtError); Template.Field="НомерБум"; ^False; fi;
 if ДатаИзв=1.1.100: Message("Заполните дату извещения",mtError); Template.Field="ДатаИзв"; ^False; fi;
 if ДВозврат2<ДатаИзв: Message("Дата операции не можеть быть ранее даты извещения",mtError); Template.Object="edДВозврат2"; ^False; fi;
 if ОтправРекв=nil: Message("Заполните учреждение (отправитель)",mtError); Template.Field="ОтправИмя_"; ^False; fi;
 if ОтправПризнак="": Message("Заполните аналитический признак учреждения (отправитель)",mtError); Template.Field="ОтправПризнак"; ^False; fi;
 if Name_A(ОтправПризнак)=" ": Message("Неизвестный аналитический признак учреждения (отправителя) '"+ОтправПризнак+"'",mtError); Template.Field="ОтправПризнак"; ^False; fi;
 if Валюта="": Валюта=BaseCurrency; fi;
 if Name_C(Валюта)=" ": Message("Неизвестный идентификатор валюты "+Валюта,mtError); Template.Field="Валюта"; Template.Frame=Iter; ^False; fi;
 УдалитьПустыеСтроки;
 if Позиции=0: Message("Заполните табличную часть извещения",mtError); Template.Field="Содерж"; Template.Frame=1; ^False; fi;
 Раб.КСА.Начать;
 for Iter=1..Позиции do
  Раб.КСА.Добавить(Позиции[Iter].ПолучСчДеб);
  Раб.КСА.Добавить(Позиции[Iter].ПолучСчКре);
 od;
 if Раб.КСА.Закончить(True): Message("Добавление новых счетов закончено"); fi;
 Раб.Бюджет.ПроверитьПризнакиНачать;
 ShowProgress(Позиции,"Проверка...");
 Try
  for Iter=1..Позиции do
   ProgressPos(Iter);
   if Позиции[Iter].ПолучСчДеб="": Message("Введите счет дебета (получатель)",mtError);  Template.Field="ПолучСчДеб"; Template.Frame=Iter; ^False; fi;
   if Позиции[Iter].ПолучСчКре="": Message("Введите счет кредита (получатель)",mtError); Template.Field="ПолучСчКре"; Template.Frame=Iter; ^False; fi;
   if Name_S(Позиции[Iter].ПолучСчДеб)=" ": Message("Неизвестный счет "+Позиции[Iter].ПолучСчДеб,mtError); Template.Field="ПолучСчДеб"; Template.Frame=Iter; ^False; fi;
   if Name_S(Позиции[Iter].ПолучСчКре)=" ": Message("Неизвестный счет "+Позиции[Iter].ПолучСчКре,mtError); Template.Field="ПолучСчКре"; Template.Frame=Iter; ^False; fi;
   if Correspond(Позиции[Iter].ПолучСчДеб,Позиции[Iter].ПолучСчКре)=False: Message("Счета не могут корреспондировать: "+Позиции[Iter].ПолучСчДеб+"/"+Позиции[Iter].ПолучСчКре,mtError); Template.Field="ПолучСчДеб"; Template.Frame=Iter; ^False; fi;
   if Позиции[Iter].Сум=0: Message("Введите сумму (отправитель)",mtError); Template.Field="Сум"; Template.Frame=Iter; ^False; fi;
   if Позиции[Iter].ПолучСум=0: Message("Введите сумму (получатель)",mtError); Template.Field="ПолучСум"; Template.Frame=Iter; ^False; fi;
   if Валюта=BaseCurrency and not Позиции[Iter].ПолучСумРуб=0: Message("Сумму в рублях возможно ввести, только для валюты, отличной от базовой ("+BaseCurrency+")",mtError); Template.Field="ПолучСумРуб"; Template.Frame=Iter; ^False; fi;
   if not СекцияАвтоДОК_УПР and RecCrd=0:
      if Позиции[Iter].ПолучПризнДеб="" and Позиции[Iter].ПолучПризнКре="":
	 if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Позиции[Iter].ПолучСчДеб,Позиции[Iter].ПолучСчКре,Позиции[Iter].ПолучПризн,ИсклПризн): Template.Field="ПолучПризн_"; Template.Frame=Iter; ^False; fi;
	 if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Позиции[Iter].ПолучСчДеб,Позиции[Iter].ПолучСчКре,Позиции[Iter].ПолучПризн,ИсклПризн): Template.Field="ПолучПризн_"; Template.Frame=Iter; ^False; fi;
	else
	 if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Позиции[Iter].ПолучСчДеб,"",Trim(Позиции[Iter].ПолучПризн+" "+Позиции[Iter].ПолучПризнДеб),ИсклПризн): Template.Field="ПолучПризнДеб_"; Template.Frame=Iter; ^False; fi;
	 if not Раб.Бюджет.ПроверитьПризнакиОбязательные("",Позиции[Iter].ПолучСчКре,Trim(Позиции[Iter].ПолучПризн+" "+Позиции[Iter].ПолучПризнКре),ИсклПризн): Template.Field="ПолучПризнКре_"; Template.Frame=Iter; ^False; fi;
	 if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Позиции[Iter].ПолучСчДеб,"",Trim(Позиции[Iter].ПолучПризн+" "+Позиции[Iter].ПолучПризнДеб),ИсклПризн): Template.Field="ПолучПризнДеб_"; Template.Frame=Iter; ^False; fi;
	 if not Раб.Бюджет.ПроверитьПризнакиСвязанные("",Позиции[Iter].ПолучСчКре,Trim(Позиции[Iter].ПолучПризн+" "+Позиции[Iter].ПолучПризнКре),ИсклПризн): Template.Field="ПолучПризнКре_"; Template.Frame=Iter; ^False; fi;
      fi;
   fi;
   --Проверка ЖО
   if not СекцияАвтоДОК_УПР and RecCrd=0:
      tmp=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(ИсклПризн,"|","ЖО.*","");
      tmp=Раб.Бюджет2005.Объединить(tmp,Раб.Бюджет2005.ПризнВСправ(Trim(Позиции[Iter].ПолучПризн+" "+Позиции[Iter].ПолучПризнДеб+" "+Позиции[Iter].ПолучПризнКре)," ",".*"),"|");
      tmp=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(tmp," ","|");
      if not Раб.Бюджет.ПроверитьПризнакиОбязательные(Позиции[Iter].ПолучСчДеб,Позиции[Iter].ПолучСчКре,НомОрд,tmp): Template.Field="НомОрд_"; Template.Frame=Iter; ^False; fi;
      if not Раб.Бюджет.ПроверитьПризнакиСвязанные(Позиции[Iter].ПолучСчДеб,Позиции[Iter].ПолучСчКре,НомОрд,tmp): Template.Field="НомОрд_"; Template.Frame=Iter; ^False; fi;
   fi;
   --
   tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Позиции[Iter].ПолучПризн," ","ПБС.*","");
   if not tmp="": Message("Повторный ввод признака получателя '"+tmp+"'",mtError); Template.Field="ПолучПризн_"; Template.Frame=Iter; ^False; fi;
   tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Позиции[Iter].ПолучПризнДеб," ","ПБС.*","");
   if not tmp="": Message("Повторный ввод признака получателя '"+tmp+"'",mtError); Template.Field="ПолучПризнДеб_"; Template.Frame=Iter; ^False; fi;
   tmp=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(Позиции[Iter].ПолучПризнКре," ","ПБС.*","");
   if not tmp="": Message("Повторный ввод признака получателя '"+tmp+"'",mtError); Template.Field="ПолучПризнКре_"; Template.Frame=Iter; ^False; fi;
   if not Transit:
      Transit=Позиции[Iter].ПолучСчДеб=Позиции[Iter].ПолучСчКре;
      if not Transit:
	 Transit=Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].ПолучСчДеб,"","СЧ5",False)=Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].ПолучСчКре,"","СЧ5",False);
      fi;
   fi;
  od;
  if Transit:
     if ПолучПризнак="": Message("Заполните аналитический признак учреждения (получателя)",mtError); Template.Field="ПолучПризнак"; ^False; fi;
     if Name_A(ПолучПризнак)=" ": Message("Неизвестный аналитический признак учреждения (получателя) '"+ПолучПризнак+"'",mtError); Template.Field="ПолучПризнак"; ^False; fi;
  fi;
  РасчетОборотов;
 Finally
  CloseProgress;
 end;
^True;
end;

Proc НоваяЗаписьНомер_Обработка;
 if not recОтправ=nil: ЗаполнитьРекв("Отправ",recОтправ); fi;
 if recПолуч=nil: ЗаполнитьРекв("Получ",Раб.Бюджет2005.НашРекв); else ЗаполнитьРекв("Получ",recПолуч); fi;
 Валюта=BaseCurrency;
 if ЗначНомОрд="": НомОрд=hНомОрд; else НомОрд=ЗначНомОрд; fi;
end;

Proc Заполнить_GUID;
var t:i;
  for t=1..ПОЗИЦИИ do
    if ПОЗИЦИИ[t].GUID='':ПОЗИЦИИ[t].GUID=GetGUID;fi;
  od;
end;

Proc ИнициализироватьУсловия(дляПРИХОДА:Logical);
 ClearVariable(УслДЕБ); ClearVariable(УслКРЕ); ClearVariable(УслАНА);

 if дляПРИХОДА:

   УслДЕБ[1] = "(*.?.101.?4.310|*.?.101.?5.310|*.?.101.?6.310|*.?.101.?8.310)&???.????.???????.???.?.???.??.???";
   УслКРЕ[1] ="(*.304.04.310|*.106.?1.410)&???.????.???????.???.?.???.??.???|00|(*.14?|*.15?|*.180)&???.?.??.?????.??.????.?.401.10.???";
   УслАНА[1] = "";

   УслДЕБ[2] = "???.????.???????.???.?.102.31.320";
   УслКРЕ[2] ="(*.304.04.320|*.106.?2.420)&???.????.???????.???.?.???.??.???|00|(*.14?|*.15?|*.180)&???.?.??.?????.??.????.?.401.10.???";
   УслАНА[2] = "";

   УслДЕБ[3] = "???.??.??.??.??.??.????.?.103.??.330";
   УслКРЕ[3] = "???.??.??.??.??.??.????.?.106.?3.430|00";
   УслАНА[3] = "";

   УслДЕБ[4] = "ЗАБ.??.101.04|ЗАБ.??.101.05|ЗАБ.??.101.06|ЗАБ.??.101.09";
   УслКРЕ[4] = "ЗАБАЛАНС";
   УслАНА[4] = "";

 else

   УслДЕБ[1] = "(???.????.???????.???.?.???.??.???&(*.104.??.410|*.304.04.310|*.401.0?.24?|*.401.0?.25?|*.401.0?.27?))|(???.?.??.?????.??.????.?.???.??.???&(*.401.0?.17?|*.401.0?.180))";
   УслКРЕ[1] = "(*.?.101.?4.410|*.?.101.?5.410|*.?.101.?6.410|*.?.101.?8.410)&???.????.???????.???.?.???.??.???";
   УслАНА[1] = "";

   УслДЕБ[2] = "(???.????.???????.???.?.???.??.???&(*.304.04.320|*.401.0?.24?|*.401.0?.25?|*.401.0?.27?))|(???.?.??.?????.??.????.?.???.??.???&(*.401.0?.17?|*.401.0?.180))";
   УслКРЕ[2] = "???.????.???????.???.?.102.31.420";
   УслАНА[2] = "";

   УслДЕБ[3] = "(???.????.???????.???.?.???.??.???&(*.304.04.340|*.?.401.0?.24?|*.?.401.0?.25?|*.?.401.0?.27?))|(???.??.??.??.??.??.????.?.???.??.???&(*.?.401.0?.17?|*.?.401.0?.180))";
   УслКРЕ[3] = "???.????.???????.???.?.105.??.440";
   УслАНА[3] = "";

   УслДЕБ[4] = "ЗАБАЛАНС";
   УслКРЕ[4] = "ЗАБ.??.101.??|ЗАБ.??.105.??";
   УслАНА[4] = "";

 fi;
end;

Proc РасчетАВТО_ДОК; -- заполнение данными из основного документа
 var t,tt,z,nsig1,ii,j,k:i;
 var wa_control,rs,ROднфа,len, RECID_REF :Integer;
 var ll,Режим,OK,Проверять104:l;
 var CRDwork, BLNwork, ДНФАID_16, fld_ДАТЫ_ОПЕР, УслАнПров, МаскаСЧ, УслПР, signs, ss, ss0, ИНВ, ПБС :String;
 var Приход,ВнПер,Расход,услсч,АН_ДНФА:s;
 var dBT, dET, d1, d2 :Date;
 var REC :Record;

 if Проводить: Exit; fi;
 OK=False;
 RECID_REF=0;
 REC=NIL;
 if CRD<>"" and CRD<>"РПО_ОПЕРАЦИИДНФА":
   CRDwork   = CRD;
   if CRDwork='РПО_ДЕНДОК_РАСХОД' or CRDwork='РПО_ДЕНДОК_ПРИХОД':
     Message('Документ сформирован из подсистемы учета денежных документов!^MЗаполнение производится непосредственно из основного документа!', mtWarning);
     Template.Field='Btn_К_ОСН_ДОК';
     Exit;
   fi;
   RECID_REF=RECCRD;
   if RECID_REF=0 and ДНФАID<>0: RECID_REF=ДНФАID; fi; -- на всякий случай
   if RECID_REF<>0:
     BLNwork	    = BLNCRD;
     REC	    = IntegerToRecord(Abs(RECID_REF));
     ДНФАID_16	    = Str16(Abs(RECID_REF));
     fld_ДАТЫ_ОПЕР  = РАБ.БЮДЖЕТ2005.ПолеДатыПроводкиКартотеки(CRDwork);
     if fld_ДАТЫ_ОПЕР="": fld_ДАТЫ_ОПЕР = 'ДАТАОПЕР'; fi;
   fi;
 else
   CRDwork   = "РПО_ОПЕРАЦИИДНФА";
   RECID_REF = ДНФАID;
   if RECID_REF=0 and RECCRD<>0: RECID_REF=RECCRD; fi;
   if RECID_REF<>0:
     BLNwork	    = "НФА.ЖУР.ОПЕРАЦИИДНФА";
     REC	    = IntegerToRecord(Abs(RECID_REF));
     ДНФАID_16	    = Str16(Abs(RECID_REF));
     fld_ДАТЫ_ОПЕР  = 'ДАТОПЕР';
   fi;
 fi;
 if REC<>NIL: OK=RecordExists(CRDwork, REC); fi;
 if not OK: Message("Не найден операционный документ^Mиз которого сформирован текущий документ.^MРасчет невозможен!", mtError); Exit; fi;

 МаскаСЧ=МаскаПолучСчКре;
 Режим=AutoRefresh;
 ToggleAutoRefresh(False);
 ROднфа=OpenWorkArea(CRDwork, "", "Ukey="+RecordToString(REC));
 ShowProgress(3, "Считывание информации основного документа ...");
 Try
   ProgressPos(1);
   Refresh(False);
   ProgressPos(2);
   ИнициализироватьУсловия(true);
   dBT=GetFieldD(ROднфа, 1, fld_ДАТЫ_ОПЕР);
   dET=dBT+1;
   len=LengthOfArray(УслАНА);
   if CRDwork='РПО_НФА_СПРАВКА':
      wa_control=OpenWorkArea('РПО_НФА_СПРАВКА_ПРОВОДКИ','','НФА_СПРАВКА="'+GetFieldS(ROднфа, 1, "НФА_СПРАВКА")+'"');
      rs=records(wa_control);
      УслАнПров='{ПБС.*&НФА.*';
      УслАнПров=Раб.Бюджет2005.ОбъединитьУсловияКонтроль256(УслАнПров,GetFieldS(ROднфа, 1, "МХЭ_ОТККОД_ОБЩ"),'&',true,false);
      УслАнПров=Раб.Бюджет2005.ОбъединитьУсловияКонтроль256(УслАнПров,GetFieldS(ROднфа, 1, "МОЛ_ОТККОД"),'&',true,false);
      ss=GetFieldS(ROднфа, 1, "ДОП_АН_КОД");
      ss=Раб.Бюджет2005.ЗаменаПодстрокиВсе(ss,'  ',' ');
      ss=Раб.Бюджет2005.ЗаменаПодстрокиВсе(ss,' ','&');
      УслАнПров=Раб.Бюджет2005.ОбъединитьУсловияКонтроль256(УслАнПров,ss,'&',true,false);
      УслАнПров=Раб.Бюджет2005.ОбъединитьУсловияКонтроль256(УслАнПров,'НФА_СПРАВКА.'+str(GetFieldI(ROднфа, 1, "СПОСОБ_РАСЧЕТА")),'&',true,false)+"}";
      УслПР=МаскаСЧ+УслАнПров;
    | CRDwork='РПО_ОПЕРАЦИИДНФА': УслПР=МаскаСЧ+"{ПБС.*&НФА.*&ДНФАID."+Str16(Abs(RECID_REF))+"&ДНФА."+GetFieldS(ROднфа, 1, "АН_ДНФА")+"}";
    | CRDwork='РПО_ДЕНДОК_РАСХОД' or CRDwork='РПО_ДЕНДОК_ПРИХОД':
      УслПР=МаскаСЧ+"{ПБС.*&ДЕНДОК.*&ДНФАID."+Str16(Abs(RECID_REF));
      ss=trim(GetFieldS(ROднфа, 1, "ОБЩПРИЗН"));
      ss=Раб.Бюджет2005.ЗаменаПодстрокиВсе(ss,'  ',' ');
      ss=Раб.Бюджет2005.ЗаменаПодстроки(ss,' ','&');
      ss=Раб.Бюджет2005.ОбъединитьУсловияКонтроль256(ss,trim(GetFieldS(ROднфа, 1, "ПРИЗНПОДР")),'&',true,true);
      УслПР=Раб.Бюджет2005.ОбъединитьУсловияКонтроль256(УслПР,ss,'&',true,false)+"}";
    | true: УслПР=МаскаСЧ+"{ПБС.*&ДНФАID."+Str16(Abs(RECID_REF))+"}";
   fi;
   ProgressPos(3);


 ClearVariable(Позиции);
 ClearVariable(buf);
 ClearVariable(BufN);
 z=0;
 ПБС="";
 Проверять104=false;
 for счета ss='('+МаскаСЧ+')&*.?.104.??.???' do
  Проверять104=true;break;
 od;
 for transaction t=УслПР,dBT,dET do
     if CRDwork='РПО_НФА_СПРАВКА':ok=GetRecordNumber(wa_control,TransRecord(k))>0;
      | true			 :ok=TransCardFile(t)=CRDwork;
     fi;
     if ok:
	if Проверять104:
	   if match(ПроводКре(t),'*.?.104.??.???'):
	      ok=(not match(ПроводДеб(t),'*.?.104.??.???')) and Раб.Бюджет2005.СоотвСчетаМаске(ПроводДеб(t),МаскаСЧ,false);
	    | true:
	      ok=(not match(ПроводКре(t),'*.?.104.??.???')) and Раб.Бюджет2005.СоотвСчетаМаске(ПроводКре(t),МаскаСЧ,false);
	   fi;
	 | true:
	      ok=Раб.Бюджет2005.СоотвСчетаМаске(ПроводКре(t),МаскаСЧ,false) and not Раб.Бюджет2005.СоотвСчетаМаске(ПроводДеб(t),МаскаСЧ,false);
	fi;
	if ok:
	   --ДобавитьВмассив(ForSelect,true,false,ПроводКоличПризнак(t)+ИНВ+'#'+str(t));
	   if ТипСвертки=0:--0 без свертки(по умолчанию)
	      ss0=ПроводКоличПризнак(t)+'#'+ПроводДеб(t)+'#'+ПроводКре(t)+'#'+ПроводАналитика(t);
	    | ТипСвертки=1:-- свертка по счету НФА (101)
	      ss0=ВыделитьСлова(1,2,ПроводКоличПризнак(t),'.')+'.'+'#'+ПроводДеб(t)+'#'+ПроводКре(t);
	    | ТипСвертки=2:-- свертка по счету и субсчету НФА (101.04)
	      ss0=ВыделитьСлова(1,3,ПроводКоличПризнак(t),'.')+'.'+'#'+ПроводДеб(t)+'#'+ПроводКре(t);
	    | ТипСвертки=3:-- счету и субсчету и 1 группе НФА (101.04.ПОСУДА)
	      ss0=ВыделитьСлова(1,4,ПроводКоличПризнак(t),'.')+'.'+'#'+ПроводДеб(t)+'#'+ПроводКре(t);
	    | ТипСвертки=4:-- свертка по наименованиям НФА
	      ss0=ПроводКоличПризнак(t)+'#'+ПроводДеб(t)+'#'+ПроводКре(t);
	    | ТипСвертки=5:-- свертка по наименованиям НФА + ИНВ
	      signs=' '+ПроводАналитика(t)+' ';
	      nsig1=pos(' УЧН.',signs);
	      if nsig1<1:
		 nsig1=pos('+УЧН.',signs);
	      fi;
	      if nsig1>0:
		ИНВ=Удалить(signs,1,nsig1);
		nsig1=pos(' ',ИНВ);
		ИНВ=Удалить(ИНВ,nsig1,255);
		ss='ИНВВЕД.'+ПроводКоличПризнак(t)+'.'+ИНВ;
		if Name_A(ss)<>' ':ИНВ=ss;fi;
	      fi;
	      ss0=ПроводКоличПризнак(t)+'|'+ИНВ+'#'+ПроводДеб(t)+'#'+ПроводКре(t);
	    | ТипСвертки=6:-- 0 без свертки(с расшифровкой по аналитике)
	      z=ПроводПризнаков(t);
	      signs=ПроводКоличПризнак(t);ss0=signs;
	      for ii=1..z do
		ss=ПроводИмяПризн(t,ii);
		if pos(SubStr(ss,1,1),'+-')>0:ss=Удалить(ss,1,1);fi;
		if ss<>ss0:signs=signs+'|'+ss;fi;
	      od;
	      ss0=signs+'#'+ПроводДеб(t)+'#'+ПроводКре(t);
	   fi;
	   if ПБС='': ПБС=РАБ.УПП.LIB.ПризнакИзСтрокиАналитикиПроводки(t, "ПБС", False); fi;
	   if ПБС='': ПБС=РАБ.УПП.LIB.ПризнакИзСтрокиАналитикиПроводки(t, "ПБС", true); fi;
	   z=ПоискВмассиве(buf,ss0,true);
	   if z<1:z=ВставитьВмассивСорт(buf,ss0);ВставитьВмассив(BufN,z,0);fi;
	   BufN[z]=BufN[z]+ПроводСумма(t);
	fi;
     fi;
 od;
 Finally
   CloseProgress;
   CloseWorkArea(ROднфа);
   if CRDwork='РПО_НФА_СПРАВКА':
      CloseWorkArea(wa_control);
   fi;
   ToggleAutorefresh(Режим);
 end;

 z=ДлинаМассива(buf);
 for ii=1..z do
  InsertFrame(Позиции,Позиции+1);

  Позиции[Позиции].ПолучСЧДЕБ	  =ВыделитьСлово(2,buf[ii],'#');
  Позиции[Позиции].ПолучСЧКРЕ	  =ВыделитьСлово(3,buf[ii],'#');
  Позиции[Позиции].ПолучСУМ	  =BufN[ii];

  ss0='';
  ss=ВыделитьСлово(1,ВыделитьСлово(1,buf[ii],'#'),'|');
  if ПоказыватьИменаГруппНФА:
     tt=КоличествоСлов(ss,'.');
     if SubStr(ss,Длина(ss),1)<>'.':signs='/'+Name_A(ss);
      | true:signs='';tt=tt+1;
     fi;
     if tt<4:k=tt-1;
      | true:k=3;
     fi;
     for j=k..tt-1 do
       ss0=ss0+'/'+Name_A(ВыделитьСлова(1,j,ss,'.')+'.');
     od;
     ss0=ss0+signs;
   | true:ss0=chr(13)+Name_A(ss);
  fi;

  ss=ВыделитьСлово(1,buf[ii],'#');
  tt=КоличествоСлов(ss,'|');
  for j=2..tt do
    ss0=ss0+chr(13)+Name_A(ВыделитьСлово(j,ss,'|'));
  od;
  ss0=Удалить(ss0,1,1);
  Позиции[Позиции].СОДЕРЖ    =ss0;
  if Соотв(Позиции[Позиции].ПолучСЧДЕБ,'*.?.104.??.???') or Соотв(Позиции[Позиции].ПолучСЧКре,'*.?.104.??.???'):
     Позиции[Позиции].СОДЕРЖ='Амортизация '+Позиции[Позиции].СОДЕРЖ;
  fi;
 od;
 if not ПБС="":
    Rec=SignToRecord(ПБС);
    if Rec=nil: Message("Аналитический признак отправителя должен быть картотечным",mtError);
     | true:
       ОтправПризнак=ПБС;
       if not ОтправРекв=Rec:
--	    ClearVariable(Получ);
	  ОтправРекв=Rec;
       fi;
    fi;
 fi;


 ДВозврат2 =dBT;
 Заполнить_GUID;
 РасчетОборотов;  
 if Номер=0:
    НоваяЗаписьНомер_Обработка;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
 fi;

end;

--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_onEnter (Field:S; Iter:I):L;
 recОтправ=nil;
 Отправ_="";
 recПолуч=nil;
 Получ_="";
 ЗначНомОрд="";
 ЗначСодерж="";
 МаскаСчДеб=Def_МаскаСчДеб;
 МаскаПолучСчКре=Def_МаскаПолучСчКре;
 ЗначПризн="";
 fДубликат=True;
 if Field="НастрПоУмолч": Message("Восстановлены значения по умолчанию"); fi;
 ^False;
end;

Func НастрЗакр_onEnter(FieldName: String; Iter: Integer): logical;
 ОткрНастр(False);
 Настр(True);
 ^False;
end;

Func МаскаСч_OnVerify(FieldName: String; Iter: Integer; Value: S): Logical;
var z:n;
 z=Saldo(Value,1.1.100);
 ^True;
end;

Func МаскаСч_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Cur=Раб.КБК.Список("*.?.???.??.*","","СЧ9 ИГ");
 if Match(Cur,"?."): Cur=Cur+"???.??.*";
   |Match(Cur,"?.???."): Cur=Cur+"??.*";
   |Match(Cur,"?.???.??."): Cur=Cur+"*";
 fi;
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 Cur="*."+Cur;
 Cur=Раб.Бюджет2005.Объединить_Диалог(GetVariableS(AsString(Template.Field)),Cur,"|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 if Раб.Бюджет2005.HideEditor: 
    Template.HideEditor(False);
    PutVariableS(AsString(Template.Field),Cur);
 fi;
 Return Cur;
end;

Func Flag_onEnter(FieldName: String; Iter: Integer): logical;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableL(FieldName,not GetVariableL(FieldName));
 Return False;
end;

Proc НомерБум_OnExit(FieldName: String; Iter: Integer);
 Номер=Int(НомерБум);
 if Номер=0: Номер=Раб.Обл.СледСУчетомГода(SelfCrd,"Номер","ДатаИзв"); fi;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:d;
var FieldName:S;
 Template.HideEditor(False);
 tmp=Calendar;
 if not tmp=1.1.100:
    FieldName=AsString(Template.Field);
    PutVariableD(FieldName,tmp);
 fi;
 ^Cur;
end;

Func Отправ_onEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=ОткрытьКартотеку("Контрагент","РПО_ПБС",ОтправРекв);
 if not Rec=nil:
    if FieldName="Отправ_":
       recОтправ=Rec;
       Отправ_=GetCardFieldS("Контрагент",Rec,"КорИмя")+",  "+GetCardFieldS("Контрагент",Rec,"ПочтАдрес");
      else
       ЗаполнитьРекв("Отправ",Rec);
    fi;
 fi;
 ^False;
end;

Proc Рекв_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Field,Bln,Prefix:S;
var Iter:I;
var Rec: Record;
 if Double:
    Field=AsString(Template.Field);
    Iter=AsInteger(Template.Frame);
    if Match(Field,"Отправ*") and ОтправРекв=nil: Message("Выберите учреждение (отправитель)",mtError); Template.Field="ОтправИмя_"; Exit;
      |Match(Field,"Получ*") and ПолучРекв=nil: Message("Выберите учреждение (получатель)",mtError); Template.Field="ПолучИмя_"; Exit;
      |Match(Field,"Рекв*") and Получ[Iter].Рекв=nil: Message("Выберите учреждение (получатель)",mtError); Template.Field="ПолучИмяКопия_"; Template.Frame=Iter; Exit;
    fi;
    Prefix=SubStr(Field,1,Pos(".",Field)-1); 
    if Prefix="Рекв": Prefix="Получ["+Str(Iter)+"]."+Prefix; fi;
    Field=SubStr(Field,Pos(".",Field)+1,255);
    Bln="РАБ.ВСПОМ.КОНТРАГЕНТ_ИНФОДОП";
    ExecuteProc("Инфо.Контрагент.Вызвать",GetVariableR(Prefix),Bln,Field,0);
 fi;
end;

Func ПризнПБС_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp,FieldRec:S;
var Rec: Record;
 FieldRec=SubStr(FieldName,1,Pos("Призн",FieldName)-1)+"Рекв";
 PutVariableS(FieldName,CardFileRecSign("Контрагент","Признак","ПБС",GetVariableR(FieldRec),""));
 tmp=AnaElection("ПБС.*",False,False,GetVariableS(FieldName));
 if not tmp="":
    Rec=SignToRecord(tmp);
    if Rec=nil: Message("Аналитический признак должен быть картотечным",mtError); ^False; fi;
    if FieldName="ПолучПризнак":
       if not ПолучРекв=Rec: 
	  ClearVariable(Получ); 
	  ПолучРекв=Rec;
       fi;
      else
       PutVariableR(FieldRec,Rec);
    fi;
    PutVariableS(FieldName,tmp);
 fi;
 Return False;
end;

Func Получ_onEnter(FieldName: String; Iter: Integer): logical;
var Rec:record;
var F:S;
 if FieldName="ПолучИмя_" or FieldName="Получ_":
    Rec=ПолучРекв; 
    F="Наше";
   else 
    Rec=Получ[Iter].Рекв; 
    F="РПО_ПБС";
 fi;
 if Iter>0:
    Rec=ОткрытьКартотеку("Контрагент",F,Rec);
   else
    Rec=Раб.Поиск.ВыборИзКартотеки("Выбор учреждения (получателя)","КОНТРАГЕНТ","ПРИЗНАК|ПОЛНИМЯ|КОРИМЯ|ИНН|РПО_КБП","Код|Полное имя|Краткое имя|ИНН|Код по сводному реестру",F);
    Iter=Abs(Iter);
 fi;
 if not Rec=nil:
    if FieldName="Получ_":
       recПолуч=Rec;
       Получ_=GetCardFieldS("Контрагент",Rec,"КорИмя")+",  "+GetCardFieldS("Контрагент",Rec,"ПочтАдрес");
      |FieldName="ПолучИмя_":
       if not ПолучРекв=Rec: 
	  ClearVariable(Получ);
       fi;
       ЗаполнитьРекв("Получ",Rec);
      |True:
       if not УникальностьПолуч(Rec,Iter)=0: Message("Повторный ввод получателя",mtError); ^False; fi;
       ЗаполнитьРекв("Получ["+Str(Iter)+"].",Rec);
    fi;
 fi;
 ^false;
end;

Func Получ_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 Template.HideEditor(False);
 Получ_onEnter(AsString(Template.Field),-AsInteger(Template.Frame));
 Return Cur;
end;

Func НомОрд_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:s;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 tmp=AnaElection("ЖО.*");
 if not tmp="":
    PutVariableS(FieldName,tmp);
    hНомОрд=tmp;
 fi;
 Return False;
end;

Proc НомОрд_OnExit(FieldName: String; Iter: Integer);
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableS(FieldName,"");
 hНомОрд="";
end;

Func Содерж_OnEnter(FieldName: String; Iter: Integer): logical;
 НеПустаяТаблица;
 if Позиции[Iter].Содерж="":
    Позиции[Iter].Содерж=ЗначСодерж;
 fi;
 Return True;
end;

Func Валюта_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
var Cur:S;
 ClearVariable(Buf);
 n=0;
 for Currencies Cur="*" do
  n=n+1;
  Buf[n]=Up(Cur)+" --"+Name_C(Cur);
 od;
 n=Alternate("Валюта",Buf,-1,1,12);
 if not n=0:
    Валюта=SubStr(Buf[n],1,3);
 fi;
 Return False;
end;

Func A_onEnter(FieldName: String; Iter: Integer): logical;
 if not Проводить:
    if AsString(Template.Name)="S5":
       InsertFrame(Получ,Получ+1);
       Template.Field="ПолучИмяКопия_";
       Template.Frame=Получ;
      else
       InsertFrame(Получ,Iter+1);
    fi;
 fi;
 ^False;
end;

Func D_onEnter(Field:S; Iter:I):L;
 if not Проводить:
    DeleteFrame(Получ,Iter);
 fi;
 ^False;
end;

Func A1_onEnter(FieldName: String; Iter: Integer): logical;
var z:i;
 if not Проводить:
    z=InsertFrame(Позиции,Iter+1);
    if fДубликат or FieldName="AA1":
       Позиции[z].Содерж=Позиции[Iter].Содерж;
       Позиции[z].СчДеб=Позиции[Iter].СчДеб;
       Позиции[z].СчКре=Позиции[Iter].СчКре;
       Позиции[z].ПолучСчДеб=Позиции[Iter].ПолучСчДеб;
       Позиции[z].ПолучСчКре=Позиции[Iter].ПолучСчКре;
       Позиции[z].ПолучПризн=Позиции[Iter].ПолучПризн;
       Позиции[z].ПолучПризнДеб=Позиции[Iter].ПолучПризнДеб;
       Позиции[z].ПолучПризнКре=Позиции[Iter].ПолучПризнКре;

    fi;
 fi;
 ^False;
end;

Func D1_onEnter (Field:S; Iter:I):L;
 if not Проводить:
    DeleteFrame(Позиции,Iter);
 fi;
 ^False;
end;

Proc Cell_OnClick(Row: Integer; Col: Integer; Double: Logical);
 Template.Row=AsInteger(Template.Row)-1;
end;

Func ОтправСч_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var FieldName:S;
var Iter:I;
 Template.HideEditor(False);
 FieldName=AsString(Template.Field);
 Iter=AsInteger(Template.Frame);
 Cur=AccountElection(if(FieldName="СчДеб",МаскаСчДеб,""),False,if(FieldName="СчДеб",Позиции[Iter].ПолучСчКре,Позиции[Iter].ПолучСчДеб));
 if not Cur="":
    FieldName="Позиции["+Str(AsInteger(Template.Frame))+"]."+AsString(Template.Field);
    PutVariableS(FieldName,Cur);
 fi;
 Return Cur;
end;

Func ПолучСчДеб_onEnter(FieldName: String; Iter: Integer): logical;
var tmp:s;
 НеПустаяТаблица;
 if Позиции[Iter].ПолучСчДеб="":
    if Позиции[Iter].ПолучСчКре="":
       tmp=hСчДеб;
      else
       tmp=Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].ПолучСчКре,"","ВД",True)+"."+Раб.Бюджет2005.ВзятьКодСчета(hСчДеб,"","СЧ8",False);
    fi;
   else
    tmp=Позиции[Iter].ПолучСчДеб;
 fi;
 tmp=PickCorrAccount(Позиции[Iter].ПолучСчКре,True,tmp);
 if not tmp="":
    Позиции[Iter].ПолучСчДеб=tmp;
    hСчДеб=tmp;
    if not Позиции[Iter].ПолучСчКре="":
       ОбновитьПризн(Iter);
    fi;
 fi;
 ^False;
end;

Func ПолучСчКре_onEnter(FieldName: String; Iter: Integer): logical;
var tmp:s;
 НеПустаяТаблица;
 if МаскаПолучСчКре="":
    if Позиции[Iter].ПолучСчКре="":
       if Позиции[Iter].ПолучСчДеб="":
	  tmp=hСчКре;
	 else
	  tmp=Раб.Бюджет2005.ВзятьКодСчета(Позиции[Iter].ПолучСчДеб,"","ВД",True)+"."+Раб.Бюджет2005.ВзятьКодСчета(hСчКре,"","СЧ8",False);
       fi;
      else
       tmp=Позиции[Iter].ПолучСчКре;
    fi;
    tmp=PickCorrAccount(Позиции[Iter].ПолучСчДеб,False,tmp);
   else
    if Позиции[Iter].ПолучСчКре="": tmp=hСчКре; else tmp=Позиции[Iter].ПолучСчКре; fi;
    tmp=AccountElection(МаскаПолучСчКре,False,tmp);
 fi;
 if not tmp="":
    Позиции[Iter].ПолучСчКре=tmp;
    hСчКре=tmp;
    if not Позиции[Iter].ПолучСчДеб="":
       if Correspond(Позиции[Iter].ПолучСчДеб,Позиции[Iter].ПолучСчКре)=False: Позиции[Iter].ПолучСчДеб=""; ^False; fi;
       ОбновитьПризн(Iter);
    fi;
 fi;
end;

Func Призн_onEnter(Field:S; Iter:I):L;
var tmp,Voc:s;
 if Field="ЗначПризн":
    tmp=МаскаСчДеб;
   else
    НеПустаяТаблица;
    if Name_S(Позиции[Iter].ПолучСчДеб)=" ": Message("Введите счет дебета (получатель)",mtError); Template.Field="ПолучСчДеб"; Template.Frame=Iter; ^False; fi;
    if Name_S(Позиции[Iter].ПолучСчКре)=" ": Message("Введите счет кредита (получатель)",mtError); Template.Field="ПолучСчКре"; Template.Frame=Iter; ^False; fi;
    if Field="ПризнДеб_": tmp=Позиции[Iter].ПолучСчДеб; if WordsCount(Позиции[Iter].ПолучПризнДеб," ")>=NumSplitVoc: Message("Превышено максимальное количество справочников ("+Str(NumSplitVoc)+") для аналитики по дебету",mtError); ^False; fi;
      |Field="ПризнКре_": tmp=Позиции[Iter].ПолучСчКре; if WordsCount(Позиции[Iter].ПолучПризнКре," ")>=NumSplitVoc: Message("Превышено максимальное количество справочников ("+Str(NumSplitVoc)+") для аналитики по кредиту",mtError); ^False; fi;
      |True: tmp=Позиции[Iter].ПолучСчДеб+"|"+Позиции[Iter].ПолучСчКре;
    fi;
    if Позиции[Iter].ПолучПризн="" and Позиции[Iter].ПолучПризнДеб="" and Позиции[Iter].ПолучПризнКре="":
       if not ЗначПризн="":
	  Позиции[Iter].ПолучПризн=ЗначПризн;
       fi;
       ПолучитьДопАн(Iter);
    fi;
 fi;
 tmp=Раб.Бюджет2005.СписокСправ(tmp,0,ИсклПризн);
 if tmp="": Message("Аналитические признаки не требуются"); ^False; fi;
 tmp=AnaElection(tmp+"|(*&~*.*)",False,False,hПризн);
 if not tmp="":
    Voc=SubStr(tmp,1,Pos(".",tmp));
    if Voc="": Voc=tmp; else Voc=Voc+"*"; fi;
    if Field="ЗначПризн":
       ЗначПризн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(ЗначПризн," ",tmp,Voc,"");
      |Field="ПолучПризн_":
       Позиции[Iter].ПолучПризн=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Позиции[Iter].ПолучПризн," ",tmp,Voc,"");
       Позиции[Iter].ПолучПризнДеб=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Позиции[Iter].ПолучПризнДеб," ",Voc,"");
       Позиции[Iter].ПолучПризнКре=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Позиции[Iter].ПолучПризнКре," ",Voc,"");
      |True:
       if Field="ПолучПризнДеб_": Позиции[Iter].ПолучПризнДеб=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Позиции[Iter].ПолучПризнДеб," ",tmp,Voc,"");
	 |Field="ПолучПризнКре_": Позиции[Iter].ПолучПризнКре=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Позиции[Iter].ПолучПризнКре," ",tmp,Voc,"");
       fi;
       Позиции[Iter].ПолучПризн=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(Позиции[Iter].ПолучПризн," ",Voc,"");
    fi;
    hПризн=tmp;
 fi;
end;

Proc Призн_OnExit(Field:S; Iter:I);
 НеПустаяТаблица;
 if Field="ЗначПризн": ЗначПризн=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(ЗначПризн," ","Name_A");
   else
    Field="Позиции["+Str(Iter)+"]."+SubStr(Field,1,Length(Field)-1);
    PutVariableS(Field,Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2(GetVariables(Field)," ","Name_A"));
 fi;
end;

Func СумРуб_OnEnter(FieldName: String; Iter: Integer): logical;
 if Валюта=BaseCurrency or Валюта="":
    Message("Сумму в рублях возможно ввести, только для валюты, отличной от базовой ("+BaseCurrency+")",mtWarning);
    Template.Field="Валюта";
    ^False;
 fi;
 Return True;
end;

Func РасчетОбр_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Проводить:
    РасчетОборотов;
 fi;
 Return False;
end;

Func ФИО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Rec:Record;
var Value,FieldName:S;
 Template.HideEditor(False);
 Rec=OpenCardFile("Сотрудники");
 if not Rec=nil:
    FieldName=AsString(Template.Field);
    if FieldName="ПолучДолжИспол" or FieldName="ПолучФИОИспол":
       ПолучДолжИспол=GetCardFieldS("Сотрудники",rec,"Должность.Долж");
       ПолучФИОИспол=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
       hПолучДолжИспол=ПолучДолжИспол;
       hПолучФИОИспол=ПолучФИОИспол;
      else
       Value=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
       PutVariableS(FieldName,Value);
    fi;
 fi;
 ^Cur;
end;

Proc Исполнитель_OnExit(FieldName: String; Iter: Integer);
 hПолучДолжИспол=ПолучДолжИспол;
 hПолучФИОИспол=ПолучФИОИспол;
end;

Func ПриВходе(FieldName: String; Iter: Integer): logical; -- обработчики секции СекцияАвтоДОК
 var OK:l;
 var ii:i;
 var rec:record;
 var CRD_АвтоДОК,bln_АвтоДОК:s;
  if FieldName='ПоказыватьИменаГруппНФА':ПоказыватьИменаГруппНФА=not ПоказыватьИменаГруппНФА;
   | FieldName='Btn_К_ОСН_ДОК'	  :
     OK=False;
     if CRD<>"" and RECCRD<>0 : CRD_АвтоДОК = CRD		; bln_АвтоДОК = BLNCRD; 		REC=IntegerToRecord(Abs(RECCRD));
     | True:			CRD_АвтоДОК = "РПО_ОПЕРАЦИИДНФА"; bln_АвтоДОК = "НФА.ЖУР.ОПЕРАЦИИДНФА"; REC=IntegerToRecord(Abs(ДНФАID));
     fi;
     if REC<>NIL and CRD_АвтоДОК<>"" and bln_АвтоДОК<>"": OK=RecordExists(CRD_АвтоДОК, REC); fi;
     if not OK: Message("Не найден операционный документ из которого сформирован текущий документ!", mtWarning); ^False; fi;
     if ModalMode:Close;fi;
     OpenBlank(bln_АвтоДОК,false,rec);
   | FieldName='Btn_РасчетАВТО_ДОК':РасчетАВТО_ДОК;
   | FieldName='Btn_ТипСвертки':
      ОчиститьПеременную(buf);
      for ii=0..6 do
	buf[ii+1]=ИмяТипаСвертки(ii);
      od;
      ii=Alternate('',buf,-1,ТипСвертки+1,12);
      if ii>0:ii=ii-1;
	 ТипСвертки=ii;
      fi;
  fi;
  ^false;
end;

--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc cbПроводить_onChange (Obj:S);
 if not Проводить:
    Проводить=EnqOkCancel("Вы уверены что хотите исключить данный документ из обработки ?",mtWarning)=cmCancel;
   else
    Проводить=Проверить;
 fi;
 cbПроводить.State=Проводить;
 Оформление;
 EditorApply;
end;

Proc btnНастр_onClick (Obj:S);
 Настр(False);
 ОткрНастр(True);
end;

Proc btnДВозврат2_onClick (Obj:S);
var tmp:d;
 tmp=Calendar;
 if tmp=1.1.100: Exit; fi;
 ДВозврат2=tmp;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;

Proc btnПечать_onClick (Obj:S);
 if КолКопий<=0: КолКопий=1; fi;
 if КолКопий>10:
    if EnqOkCancel("Вы уверены, что хотите распечатать "+Str(КолКопий)+" копий документа ?")=cmCancel:
       Message("Отказ от печати"); 
       Exit;
    fi;
 fi;
 Раб.Настр_Печать.Prn("","",SelfCfg,"",КолКопий);
end;

Proc cbЗакрытьДок_OnChange(Sender: String);
var State:I;
 if ClosedModFob and not fQCMF:
    State=Enquiry("","Документ будет закрыт от изменений^MВнимание!^MПосле установки данного флага, если вы необладаете достаточными правами, вы НЕ СМОЖЕТЕ снять данный флаг^MПродолжить ?","Отмена;Да;Больше не спрашивать",mtWarning);
    if State=1: ClosedModFob=False; cbЗакрытьДок.State=ClosedModFob; Exit;
      |State=3: fQCMF=True;
    fi;
 fi;
 EditorApply;
end;

Func OnInsert(SectName: String): Logical;
 Return not Проводить;
end;

Proc AfterInsert(SectName: String; Iter: Integer);
 if fДубликат and not Iter=1:
    Позиции[Iter].Содерж=Позиции[Iter-1].Содерж;
    Позиции[Iter].СчДеб=Позиции[Iter-1].СчДеб;
    Позиции[Iter].СчКре=Позиции[Iter-1].СчКре;
    Позиции[Iter].ПолучСчДеб=Позиции[Iter-1].ПолучСчДеб;
    Позиции[Iter].ПолучСчКре=Позиции[Iter-1].ПолучСчКре;
    Позиции[Iter].ПолучПризн=Позиции[Iter-1].ПолучПризн;
    Позиции[Iter].ПолучПризнДеб=Позиции[Iter-1].ПолучПризнДеб;
    Позиции[Iter].ПолучПризнКре=Позиции[Iter-1].ПолучПризнКре;
 fi;
end;

Func OnDelete(SectName: String; Iter: Integer): Logical;
 Return not Проводить;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 FlagInit=True;
 Раб.Настр_Печать.Cfg("",SelfCfg);
end;

Proc AfterOpen(Destroy: Logical);
 УМЦ_Оформление(true);
 Инициализация;
 Оформление;
 УМЦ_Оформление(not УМЦ);
 FlagInit=False;
 cbЗакрытьДок.Visible=Раб.Бюджет2005.Сетевая;
end;

Proc onRead;
 if recCurrent<>nil:
    if recCurrent<>Current:
       recCurrent=Current(recCurrent);
    fi;
    recCurrent=nil;
 fi;
 ОткрНастр(False);
 Настр(False);
 if НоваяЗапись:
    if Номер=0:
       ДВозврат2=ToDay;
       НоваяЗаписьНомер_Обработка;
       ПолучДолжИспол=hПолучДолжИспол;
       ПолучФИОИспол=hПолучФИОИспол;
    fi;
    Проводить=False;
    Проводить=ClosedModFob;
    ДНФАID=0;
    RECCRD=0;
    CRD="";
    BLNCRD="";
    is69н=True;
    if Раб.Бюджет2005.Сетевая: EditorApply; fi;
   else
    if Номер=0:
       НоваяЗаписьНомер_Обработка;
       if Раб.Бюджет2005.Сетевая: EditorApply; fi;
    fi;
 fi;
 if not FlagInit: Оформление; fi;
 if УМЦ: УМЦ_onRead;
--  | true:УМЦ_Оформление(true);
 fi;
 if RefreshTurnOnRead:
    РасчетОборотов;
    EditorApply;
 fi;
end;

Func OnVerify: Logical;
 Сумма=ИтогоСум;
 СуммаПолуч=ИтогоПолучСум;
 if Валюта="": Валюта=BaseCurrency; fi;
 is69н=True;
 Заполнить_GUID;
 if УМЦ: УМЦ_OnVerify;fi;

 ^True;
end;

Proc ПриЗакрытии(Уничтожить: Логич);
УМЦ_CloseWA_РПО_СТАТУС_ДОК;
end;

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




Конец
