БланкСШаблоном "Доверенность",
Редактор  Доверенности;

ТипФормыМ2:Logical=[false]; -- Изменение типа формы на M-2

Шапка:String=if(ТипФормыМ2,"Типовая межотраслевая форма № М-2","Типовая межотраслевая форма № М-2а");
ОКУД:String=if(ТипФормыМ2,"0315001","0315002");
ОборотнаяСторона:String=if(ТипФормыМ2,"Оборотная сторона формы № М-2","Оборотная сторона формы № М-2а");
ШапкаТаблицы:String=if(ТипФормыМ2,"Перечень материальных ценностей, подлежащих получению",'');

Квитанция1:Integer=if(ТипФормыМ2,1,0);
Квитанция2:Integer=if(ТипФормыМ2,1,0);

КНФильтрПлат:String='Ф';
КНПлат:String='...';

КНФильтрВыдана:String='Ф';
КНВыдана:String='...';

КНФильтрПолучениеОт:String='Ф';
КНПолучениеОт:String='...';

КНПлюс:String="+";
КНМинус:String="-";
КНФильтр:String="";

-- Флаги выбора товара из разных картотек
ТипВыбора:Integer=[0]; -- 0 - ТМЦ, 1 - ОСиНА, 2 - Текст

ФлТМЦ:String=if(ТипВыбора=0,'V','');
ФлОСИНА:String=if(ТипВыбора=1,'V','');
флТекст:String=if(ТипВыбора=2,'V','');

----------------------

СФильтром:Logical;

fОдинЛист:L;
sNP: Section;

Proc Строка(Об:String);
 If об="Button3" :
     ВставитьРамку(КолДовер,КолДовер+1);
     КолДовер[КолДовер].NN=КолДовер;
   |об="Button2" and КолДовер>=1:
     УдалитьРамку(КолДовер,КолДовер);
 fi;
End;

ДАТА1:Date=[if(ДАТА > 01.01.100, ДАТА+10, ДАТА)];
NNN[]=$;

func Написать(x:String):String;
var spl :String;
  spl=if(Round(x,0)=Round(x,3),'ЕД0',if(Round(x,1)=Round(x,3),'ЕД1',if(Round(x,2)=Round(x,3),'ЕД2','ЕД3')));
  ^SLO_(Round(x,3),spl);
end;

proc ВводКол(Field :String;Iter:Integer);
  КолДовер[Iter].Кол=Написать(КолДовер[Iter].Кол);
end;

Proc ВосстДатаДейств;
 if ДДейств=1.1.100 and Дата1<>1.1.100:
   ДДейств=Дата1;
   EditorApply;
 fi;
End;

ПОТР:String=РЕКВ.КорИмя+", "+РЕКВ.ЮРАДРЕС;

proc ПриСчитывании;
  if CurrentState=CrdusInserted:
     Номер=Раб.Обл.СледСУчетомГода("Доверенности","Номер","Дата");
     НомерБум=СТР(Номер);
     Дата=Сегодня;
     ДДейств=ДАТА+14;
  fi;
  If Номер = 0:
      РЕКВ=РАБ.Обл.ПервЗапись("Контрагент","","Наше");
      БАНК=РАБ.Обл.ПервЗапись("БАНК_СЧЕТА","","Умолчание and КонтрАгент="+RecordToString(Рекв));
      if not Рекв=nil:
	 ФИОРук=РЕКВ.ФИОРук;
	 ФИОБух=РЕКВ.ФИОБух;
      fi;
      Плат=Потр;
  | True :
      If Рекв = Nil :
	РЕКВ=РАБ.Обл.ПервЗапись("Контрагент","","Наше");
	БАНК=РАБ.Обл.ПервЗапись("БАНК_СЧЕТА","","Умолчание and КонтрАгент="+RecordToString(Рекв));
	if not Рекв=nil:
	   if ФИОРук="": ФИОРук=РЕКВ.ФИОРук; fi;
	   if ФИОБух="": ФИОБух=РЕКВ.ФИОБух; fi;
	fi;
      Fi;
      If НомерБум = "" :
	НомерБум=СТР(Номер);
      Fi;
  Fi;
  ВосстДатаДейств;
End;

КорИмя	     :String = Рекв.КорИмя+" ИНН: "+Рекв.ИНН+" КПП: "+Рекв.КПП;
ФИОДолжность :String = if(ФИО<>nil and ФИОС="":ФИО.ДОЛЖНОСТЬ.Долж+"  "+ФИО.ФИОТ,Должность+"  "+ФИОС);

proc ВыборИзКартотеки(Клетка:String);
var temp:record;
var Robl:Integer;
  if Клетка = "КНПлат" :
      temp=ОткрытьКартотеку("Контрагент","Поставщик ИЛИ ДиК",РЕКВП);
      if temp<>nil:
	  РЕКВП=temp;
	  ПЛАТ=РЕКВП.КорИмя+", "+РЕКВ.ЮрАдрес;
      fi;
    |Клетка = "КНПолучениеОт" :
      temp=ОткрытьКартотеку("Контрагент","Поставщик ИЛИ ДиК",РЕКВН);
      if temp<>nil:
       РЕКВН=temp;
       ПостОт=РЕКВН.КорИмя;
      fi;
    |Клетка = "КНВыдана" :
      temp=ОткрытьКартотеку("Сотрудники","МОЛ and ДАТАУВОЛЬНЕНИЯ=1.1.100",ФИО);
      if temp<>nil:
	ФИО=temp;
	ФИОС=ФИО.ФИОТ;
	Должность=ФИО.Должность.Долж;
	robl=OpenWorkArea('Сотр_Документ','','ДЕЙСТВУЮЩИЙ and СОТР='+recordtostring(ФИО));
	Try
	  if records(robl)>0:
	    Серия=GetFieldS(Robl,1,'СЕРИЯ');
	    НомерП=GetFieldS(Robl,1,'НОМЕР');
	    КемВыдан=GetFieldS(Robl,1,'КЕМ');
	    ДВыдачи=GetFieldD(Robl,1,'ДАТАВЫДАЧИ');
	  else
	    Серия='';
	    НомерП='';
	    КемВыдан='';
	    ДВыдачи=1.1.100;
	  fi;
	finally
	  closeWorkArea(robl);
	end;
      fi;
  fi;
end;

func Контр(Об:String;Итер:Integer):Logical;
var temp:record;
  If Об = "коримя" :
      temp=ОткрытьКартотеку("КонтрАгент","Наше");
      if temp<>nil:
	 РЕКВ=temp;
	 ФИОРук=РЕКВ.ФИОРук;
	 ФИОБух=РЕКВ.ФИОБух;
      fi;
      ^False;
  Fi;
end;

proc НомерБ(Field:String;Iter:Integer);
var WW:Integer;
  WW = ЦЕЛ(НомерБум);
  If WW > 0 And  Номер <> WW :
   Номер=WW;
  Fi;
end;

Proc ВыборСФильтром(Клетка:String);
var rec:record;
var Iter,robl:Integer;
if Клетка="КНФильтрПлат":
    rec=Раб.Документы.ВыборСФильтром("Контрагент","ПолнИмя","Поставщик ИЛИ ДиК");
    if Rec<>nil:
     РЕКВП=rec;
     ПЛАТ=РЕКВП.КорИмя+", "+РЕКВП.ЮрАдрес;
    fi;
  |Клетка = "КНФильтрВыдана" :
    rec=Раб.Документы.ВыборСФильтром("Сотрудники","ФИОТ","");
    if rec<>nil:
      ФИО=rec;
      ФИОС=ФИО.ФИОТ;
      Должность=ФИО.Должность.Долж;
      robl=OpenWorkArea('Сотр_Документ','','ДЕЙСТВУЮЩИЙ and СОТР='+recordtostring(ФИО));
      Try
	if records(robl)>0:
	  Серия=GetFieldS(Robl,1,'СЕРИЯ');
	  НомерП=GetFieldS(Robl,1,'НОМЕР');
	  КемВыдан=GetFieldS(Robl,1,'КЕМ');
	  ДВыдачи=GetFieldD(Robl,1,'ДАТАВЫДАЧИ');
	else
	  Серия='';
	  НомерП='';
	  КемВыдан='';
	  ДВыдачи=1.1.100;
	fi;
      finally
	closeWorkArea(robl);
      end;
     fi;
  |Клетка = "КНФильтрПолучениеОт" :
    rec=Раб.Документы.ВыборСФильтром("КонтрАгент","КорИмя","Поставщик ИЛИ ДиК");
    if rec<>nil:
     РЕКВН=rec;
     ПостОт=РЕКВН.КорИмя;
    fi;
   Fi;
End;

Func ВыборТовара_ПриВходе(Об:String;Итер:Integer):Logical;
var TMPRec:Record;
var Карт,Фильтр:String;
  if ТипВыбора=1: Карт="УчетКарточкаОС";фильтр="";
    |ТипВыбора=0:
      Карт="ТМЦ";
      Фильтр="";
    |ТипВыбора=2: ^True;
  fi;
   if СФильтром: TMPRec = Раб.документы.ВыборСФильтром(Карт,"Коммент",Фильтр);
    else TMPRec = ОткрытьКартотеку(Карт,Фильтр);
   fi;
   If TMPRec = NIL : ^True;
     |True :
      If КолДовер = 0 : ВставитьРамку(КолДовер,КолДовер+1); Fi;
      if Карт="ТМЦ":
	      Раб.Документы.TMSelect(TMPRec);
	      КолДовер[Итер].Наим = Раб.Документы.НаимТМЦ;
	      КолДовер[Итер].ЕдИзм= Раб.Документы.ЕдИзмТМЦ;
	    |Карт="УчетКарточкаОС":
	      Раб.Документы.OCSelect(TMPRec);
	      КолДовер[Итер].Наим = Раб.Документы.НаимОС;
	      КолДовер[Итер].ЕдИзм= '';
      Fi;
  Fi;
end;

func ВыборСчета_ПриВходе(Об:String;Iter:Integer):Logical;
var temp:record;
  temp=ОткрытьКартотеку("БАНК_СЧЕТА","КонтрАгент="+RecordToString(Рекв),БАНК);
  if temp<>nil: БАНК=temp;fi;
  ^False;
end;

proc Отмена(Об:String);
   EditorCancel;
   Close;
end;

proc Запомнить(Об:String);
   EditorApply;
   Close;
end;

proc Помощь='Помощь';
  Раб.Сис.ShowHelpContext(234);
end;

func КНФильтрПлат_ПриВходе(Клетка:String;Итер:Integer):Logical;
  ВыборСФильтром(Клетка);
  ^false;
end;

func КНПлат_ПриВходе(Клетка:String;Итер:Integer):Logical;
  ВыборИзКартотеки(Клетка);
  ^false;
end;

func КНФильтрВыдана_ПриВходе(Клетка:String;Итер:Integer):Logical;
  ВыборСФильтром(Клетка);
  ^false;
end;

func КНВыдана_ПриВходе(Клетка:String;Итер:Integer):Logical;
  ВыборИзКартотеки(Клетка);
  ^false;
end;

func КНФильтрПолучениеОт_ПриВходе(Клетка:String;Итер:Integer):Logical;
  ВыборСФильтром(Клетка);
  ^false;
end;

func КНПолучениеОт_ПриВходе(Клетка:String;Итер:Integer):Logical;
  ВыборИзКартотеки(Клетка);
  ^false;
end;

func КНПлюс_ПриВходе(Поле:String;Итер:Integer):Logical;
  InsertFrame(КолДовер,КолДовер+1);
  ^false;
end;


func КНМИНУС_ПриВходе(Поле:String;Итер:Integer):Logical;
  DeleteFrame(КолДовер,Итер);
  ^false;
end;

func ФлВыбора_ПриВходе(Поле:String;Итер:Integer):Logical;
  if Поле='флТМЦ':
      ТипВыбора=0;
    |Поле='флОСиНА':
      ТипВыбора=1;
    |Поле='флТекст':
      ТипВыбора=2;
  fi;
  ^false;
end;

func Фильтр_ПриВходе(Поле:String;Итер:Integer):Logical;
  СФильтром=true;
  ВыборТовара_ПриВходе(Поле,Итер);
  СФильтром=false;
  ^false;
end;

Proc OnOpen(Create: Logical);
  Раб.Настр_Печать.Cfg("","Документы.мат.доверенность2а.cfg");
  sNP.Row(1,RowNewPage,not fОдинЛист);
end;


Proc cbОдинЛист_OnChange(Sender: String);
 sNP.Row(1,RowNewPage,not fОдинЛист);
end;


Конец