БЛАНКСШАБЛОНОМ "Счет - фактура по учету НДС",
Редактор СчетФакт;
Uses Раб.Бух,Раб.Обл, Раб.Документы,Раб.Предм,Раб.список,раб.формат,раб.оплата,Раб.Сис;

  ТекстОплата:String=['Оплата производится в рублях по курсу ЦБ РФ на день платежа'];

  var Допол:Integer;
  СумА[]:Numeric=КолНаим[$].СумАкц;

  СумДок:Numeric=СуммаМассива(КолНаим[].Сумма,КолНаим);
  АкцДок:Numeric=СуммаМассива(СумА,КолНаим);
  НДСДок:Numeric=СуммаМассива(КолНаим[].СуммаНДС,КолНаим);

  СумВсего:Numeric=СуммаМассива(КолНаим[].Всего,КолНаим);

  -- Прописи документа
  Пропись:String=if(СумВсего=0,"",Раб.Бух.СуммаПрописью(СумВсего,Валюта));
  НДСПропись:String=if(НДСДок=0,"",Раб.Бух.СуммаПрописью(НДСДок,Валюта));
  ------

  КорИмя:Строка=Рекв.ПолнИмя;

  ПерТМЦ	     :Object;
  ПерОС 	     :Object;
  ОбТекст	     :Object;
  ПертТекстПок	     :Object;
  кнИмпорт	     :Object;

  chПертТекстПок:Logical;
  InFiltr:Logical;
  Текст:Integer;

 нпВалюта:Object;-- отображение валюты

 УбратьПропись:Logical;-- флаг убрать сумму прописью
 СуммаПрописью:Logical=not УбратьПропись; -- секция с суммой прописью

 ФИОРук:String=if(Рук=nil,Рекв.ФИОРук,Рук.Фамилия[Дата]+' '+Рук.ИНИЦИАЛЫ);
 ФИОБух:String=if(Бух=nil,Рекв.ФИОБух,Бух.Фамилия[Дата]+' '+Бух.ИНИЦИАЛЫ);

proc ВыводВалюты;
-- Выводит имя валюты на экран и отображает текст
  if Валюта='':
    нпВалюта.Надпись='РУБ';
  else
    нпВалюта.Надпись=Валюта;
  fi;
  Текст=if(UP(Валюта)<>'РУБ' and Валюта<>'' and ТекстОплата<>'',1,0);
end;

proc ДопИнфо_ПриИзменении(Флаг:String);
  Допол=if(Дополнительно,1,0);
end;

proc СохрПервОплату;
var i,n:Integer;
var ПДата:Date;
  Пдата=Оплата[1].Дата;
  n=1;
  for i=2..Оплата do
    if Оплата[i].Дата<=Пдата:n=i;Пдата=Оплата[i].Дата;fi;
  od;
  КолОплат=Оплата;
  ДатаПерв=Пдата;
  СуммаОплаты=Оплата[n].СумОпл;
  ВалютаОпл=Оплата[n].Валюта;
end;

Func ВыборОплаты(Строка:String;Итер:Integer):Logical;
var Robl:Integer;
 if Not Аванс:
   РедакторПрименить;
   Robl=OpenWorkArea("СчетФАкт","","UKEY="+RecordToString(Current));
   Try
     OpenBlankEditor("РАб.Оплата",Robl,1);
     if Ном<>Раб.Оплата.ВозрНомер or  ДатаХ<>Раб.Оплата.ВозрДата:
	 Ном=Раб.Оплата.ВозрНомер;
	 ДатаХ=Раб.Оплата.ВозрДата;
     fi;
     СохрПервОплату;
     ^False;
   Finally
     CloseWorkArea(Robl);
   End;
 else
   СохрПервОплату;
   ^True;
 fi;
End;

proc Вых(Клетка:String;Итер:Integer);
  СуммаНДС10=0;
  СуммаНДС18=0;
  СуммаНДС20=0;
  Сум1Сторно=0;
  Сум18Сторно=0;
  Сум2Сторно=0;
  ВсегоДокСт=0;
  ЗакрытьАванс=false;
end;

func Выбор(Об:String;Iter:Integer):Logical;
var Пред,Опис:String;
  Раб.Список.СкрытьФлаг=if(Валюта<>'РУБ':false,true);
  if Покуп>" ":
   if Аванс=true:Раб.Список.Ав=true;else Раб.Список.Ав=false;fi;
   Раб.Список.ЗАКРЫТЬАВАНС=ЗАКРЫТЬАВАНС;
   Раб.Список.Покуп=Покуп;
   if РеквП<>nil:
     Раб.Список.СсылкаПокуп=RecordToString(РеквП);
   else
     Раб.Список.СсылкаПокуп='';
   fi;
   Раб.Список.Признак=ЕСЛИ(Аванс=true,true,false);
   Пред=Сделка;
   OpenBlank("Раб.Список");

    ЗАКРЫТЬАВАНС=Раб.Список.ЗАКРЫТЬАВАНС;

   else message("Пожалуйста, выберите покупателя");шаблон.Поле="Покуп";Сделка="";
  fi;
   Сделка=Раб.Список.ВозврСделку;
   Описание=Раб.Список.ВозврКоммент;
   if Сделка="" :
    Сделка=Пред;
    Описание=Опис;
    else
     СуммаНДС10=0;
     СуммаНДС18=0;
     СуммаНДС20=0;
     Сум1Сторно=0;
     Сум18Сторно=0;
     Сум2Сторно=0;
     ВсегоДокСт=0;
   fi;
  ^False;
End;


proc КнопИмпорт;
 if Аванс:
   кнИмпорт.enabled=false;
  else
   кнИмпорт.enabled=true;
 fi;
end;


Proc КнопРасч(Об:String);
  КнопИмпорт;
  if Аванс:
    Счет='62.1';
   else
    Счет='90.3';
  fi;
end;


proc ВыборВалюты(Поле:String);
  Валюта=Раб.Бух.ВыбратьВалюту(Валюта);
  ВыводВалюты;
end; -- ВыборВалюты


proc ПриСчитывании;
  If Раб.Обл.НоваяЗапись('СЧЕТФАКТ',Current):
       Счет='90.3';
       Дата=Сегодня;
       Номер=Раб.Обл.СледСУчетомГода("СчетФакт","Номер","Дата");
       НомерБум=СТР(Номер);
       if Рекв=nil:Рекв=РАБ.Обл.ПервЗапись("КонтрАгент","","Наше");fi;
       if Рекв<>nil:
	 if ГрузОтпр='':ГрузОтпр='он же';fi;
       fi;
       НРасчет=true;
       if Валюта='':Валюта="РУБ";fi;
       if BlankExist("РАБ.ТСС.БИБ.SQL"):Изсистемы=2;fi;
  | True :
      If НомерБум = "" :
      НомерБум=СТР(Номер);
      Fi;
      If Рекв = Nil :
       Рекв=РАБ.Обл.ПервЗапись("КонтрАгент","","Наше");
      Fi;
  Fi;
  ПерТМЦ.state=true;
  КнопИмпорт;
  ВыводВалюты;
  ДопИнфо_ПриИзменении('');
end;

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

func ПриПроверке:Logical;
var JJ,i:Integer;
var Tmp1,Tmp2,Tmp3,Tmp4,Tmp5,Tmp6,Tmp7:Numeric;
var Ан:String;

-- Расчет информации для книги продаж
--   For i=1..КолНаим do КолНаим[I].Всего=Сумма[I]+СумНДС[I]; Od;
   Tmp1=0;
   Tmp2=0;
   Tmp3=0;
   Tmp4=0;
   Tmp5=0;
   Tmp6=0;
   Tmp7=0;

   СумОплИтого=0;
   for i=1..оплата do
     СумОплИтого=СумОплИтого+оплата[i].СумОпл;
   end;

   if Аванс=true and Сделка<" ":
     Дополнительно=true;
     message("Выберите код аванса");
     Допол=if(Дополнительно,1,0);
     Шаблон.Поле="Сделка";
     ^False;
   fi;
   if Аналит="" and Покуп="":
      if Покуп="":
	 message("Пожалуйста, выберите покупателя");
	 шаблон.поле="Покуп";
	 ^False;
	else message("Пожалуйста, выберите покупателя заново");^False;
      fi;
   fi;
   if Not Аванс:СохрПервОплату; else колоплат=1;fi;
   For JJ=1..КолНаим Do
	   Tmp1=Tmp1+КолНаим[JJ].Всего;
     if Round(КолНаим[JJ].НДС) = 18:
       Tmp6    =Tmp6+КолНаим[JJ].СуммаНДС;
       Tmp7    =Tmp7+if(not Аванс,КолНаим[JJ].Сумма,КолНаим[JJ].Всего-КолНаим[JJ].СуммаНДС);
     |Round(КолНаим[JJ].НДС) <> 10 and	КолНаим[JJ].НДС <> 0 and КолНаим[JJ].НДС <> 9.09:
       Tmp2    =Tmp2+КолНаим[JJ].СуммаНДС;
       Tmp4    =Tmp4+if(not Аванс,КолНаим[JJ].Сумма,КолНаим[JJ].Всего-КолНаим[JJ].СуммаНДС);
     |Round(КолНаим[JJ].НДС) = 10 or КолНаим[JJ].НДС = 9.09:
       Tmp3    =Tmp3+КолНаим[JJ].СуммаНДС;
       Tmp5    =Tmp5+if(not Аванс,КолНаим[JJ].Сумма,КолНаим[JJ].Всего-КолНаим[JJ].СуммаНДС);
     Fi;
   Od;

   If ВсегоДок <> Tmp1 : ВсегоДок = Tmp1; Fi;
   If Сто1	  <> Tmp2 :  Сто1 = Tmp2; Fi;
   If Сто18	  <> Tmp6 :  Сто18= Tmp6; Fi;
   If Сто2	  <> Tmp3 :  Сто2 = Tmp3; Fi;
   If Сум1	  <> Tmp4 :  Сум1 = Tmp4; Fi;
   If Сум18	  <> Tmp7 :  Сум18= Tmp7; Fi;
   If Сум2	  <> Tmp5 :  Сум2 = Tmp5; Fi;
   Ан=substr(Аналит,pos('.',Аналит)+1,length(Аналит));
   АнКод = if(Ан<>'':Ан+".",'')+if(КодСделки<>'',КодСделки+'.','')+раб.предм.PtrStr(current,5);
   if Валюта<>'РУБ':ЗакрытьАванс=false;fi; -- Для валюты не предусмотрен флаг "ЗакрытьАванс"
   ^True;
end;

func TMS(Об:String;Итер:Integer):Logical;
var TMPRec:Record;
var Карт,Фильтр:String;
  if asLogical(ПерОС.state)=true: Карт="УчетКарточкаОС";фильтр="";
    |aslogical(ПерТМЦ.state)=true: 
       Карт="ТМЦ";
       if Раб.Сис.Ver69:
	 Фильтр="";
       else
	 Фильтр="Товар ИЛИ Материал ИЛИ Услуга";
       fi;
    |aslogical(ОБТекст.state)=true:^True;
  else message("Выберите тип открываемой картотеки");^False;
  fi;
   If КолНаим = 0 :
	  ВставитьРамку(КолНаим,КолНаим+1);
   Fi;
  if InFiltr: TMPRec=Раб.документы.ВыборСФильтром(Карт,"Коммент",Фильтр);
   else  TMPRec = ОткрытьКартотеку(Карт,Фильтр);
  fi;
   If TMPRec = NIL :  ^False;
   | True :
	 If КолНаим = 0 :
	   ВставитьРамку(КолНаим,КолНаим+1);
	 Fi;
   if Карт="ТМЦ":
	Раб.Документы.TMSelect(TMPRec);
	КолНаим[Итер].Наим = Раб.Документы.НаимТМЦ;
	КолНаим[Итер].НДС  = Раб.Документы.НДСТМЦ;
	КолНаим[Итер].ЕдИзм= Раб.Документы.ЕдИзмТМЦ;
	КолНаим[Итер].Страна= Раб.Документы.СтранаТМЦ;
	КолНаим[Итер].ГТД= Раб.Документы.ГТДТМЦ;
   |Карт="УчетКарточкаОС":
	Раб.Документы.OCSelect(TMPRec);
	КолНаим[Итер].Наим = Раб.Документы.НаимОС;
	fi;
   Fi;
 ^False;
end;

Proc ВосстРекв;
var Robl:Integer;
var rec:Record;
  Robl=OpenWorkArea("Контрагент","ПолнИмя","ПолнИмя='"+Покуп+"'"); --ЮрЛицо
  Try
  if Раб.Обл.CheckIt(Robl):
      Адрес=GetFieldS(RObl,1,"Юрадрес");
      Телефон=GetFieldS(RObl,1,"телконт"); -- телефон
      ИНН=GetFieldS(RObl,1,"ИНН");
      КПП=GetFieldS(RObl,1,"КПП");
      rec=GetRecordKey(Robl,1);
      Аналит=CARDFILERECSIGN('КОНТРАГЕНТ','ПРИЗНАК','К',rec);
  fi;
  Finally
    CloseWorkArea(Robl);
  End;
End;

var СписокДокументов[]:String;


Proc ВосстНаименов;
var Robl,i,НомЗап:Integer;
  Robl=OpenWorkArea("ТМЦ","КОММЕНТ","");
  Try
    for i=1..КолНаим do
      НомЗап=Search(Robl,1,КолНаим[i].Наим);
      if НомЗап<>0 :
	КолНаим[i].Страна=GetFieldS(Robl,НомЗап,'СТРАНА');
	КолНаим[i].ГТД	 =GetFieldS(Robl,НомЗап,'ГТД');
      fi;
    end;
  Finally
    CloseWorkArea(Robl);
  end;
End;

Proc ИмпортИзСчета;
var ВыбрЗап:Record;
var Robl,RSubObl,НомЗап,i,Кол,Вар:Integer;
var СчАдрес:String;
  ВыбрЗап=OpenCardFile('Счет');
  if ВыбрЗап<>Nil:
      Robl=OpenWorkArea('Счет','НомерБум','');
      Try

	-- Основная часть
	НомЗап=GetRecordNumber(Robl,ВыбрЗап);
	Рекв=GetFieldR(Robl,НомЗап,'Рекв');
	РеквП=GetFieldR(Robl,НомЗап,'РеквП');
	Покуп=GetFieldS(Robl,НомЗап,'Пост');
	Валюта=GetFieldS(Robl,НомЗап,'Валюта');
	СчАдрес=GetFieldS(Robl,НомЗап,'Адрес');
	if Покуп<>'':
	  ВосстРекв;
	fi;
	ГрузПол=Покуп+if(СчАдрес<>'',','+СчАдрес,'');

	-- Очищаем поля
	While  КолНаим > 0 Do
	  DeleteFrame(КолНаим,КолНаим);
	Od;

	-- Табличная часть
	RSubObl=OpenArray(Robl,НомЗап,'КОЛПОЗСЧ','');
	Try
	  кол=Records(RSubObl);
	  for i=1..кол do
	    InsertFrame(КолНаим,КолНаим+1);
	    КолНаим[i].Наим  =GetFieldS(RSubobl,i,'НАИМ');
	    КолНаим[i].Колич =GetFieldN(RSubobl,i,'КОЛИЧ');
	    КолНаим[i].Цена  =GetFieldN(RSubobl,i,'ЦЕНА');
	    КолНаим[i].НДС   =GetFieldN(RSubobl,i,'НДС');
	    КолНаим[i].ЕдИзм =GetFieldS(RSubobl,i,'ЕдИзм');
	    КолНаим[i].Сумма =GetFieldN(RSubobl,i,'Сумма');
	    КолНаим[i].СуммаНДС=GetFieldN(RSubobl,i,'СуммаНДС');
	    КолНаим[i].Всего   =GetFieldN(RSubobl,i,'Всего');
	  end;
	Вар=GetFieldI(Robl,НомЗап,'ВарНалПр');
	Finally
	  CloseWorkArea(RSubobl);
	End;

	if Кол>0 : -- Восстановление Страны и ГТД
	   ВосстНаименов;
	fi;
      Finally
	CloseWorkArea(Robl);
      End;
  fi;
  ВыводВалюты;
End;

Proc ИмпортИзНакладной;
var ВыбрЗап:Record;
var Robl,RSubObl,НомЗап,i,Кол:Integer;
  ВыбрЗап=OpenCardFile('Накладная');
  if ВыбрЗап<>Nil:
      Robl=OpenWorkArea('Накладная','НомерБум','');
      Try

	-- Основная часть
	НомЗап=GetRecordNumber(Robl,ВыбрЗап);
	Рекв=GetFieldR(Robl,НомЗап,'Рекв');
	РеквП=GetFieldR(Robl,НомЗап,'РеквП');
	Покуп=GetFieldS(Robl,НомЗап,"Пост");
	Валюта=GetFieldS(Robl,НомЗап,"Валюта");
	if Покуп<>'':
	  ВосстРекв;
	fi;
	ГрузПол=Покуп+if(РеквП.ПочтАдрес<>'',','+РеквП.ПочтАдрес,'');

	ClearVariable(КолНаим);

	-- Табличная часть
	RSubObl=OpenArray(Robl,НомЗап,'ПОЗИЦИИ','');
	Try
	  кол=Records(RSubObl);
	  for i=1..кол do
	    InsertFrame(КолНаим,КолНаим+1);
	    КолНаим[i].Наим  =GetFieldS(RSubobl,i,'ТМЦС');
	    КолНаим[i].Колич =GetFieldN(RSubobl,i,'КОЛИЧ');
	    КолНаим[i].Цена  =GetFieldN(RSubobl,i,'ЦЕНА');
	    КолНаим[i].НДС   =GetFieldN(RSubobl,i,'НДС');
	    КолНаим[i].ЕдИзм =GetFieldS(RSubobl,i,'ЕДИЗМС');
	    КолНаим[i].Сумма =GetFieldN(RSubobl,i,'Сумма');
	    КолНаим[i].СуммаНДС=GetFieldN(RSubobl,i,'СуммаНДС');
	    КолНаим[i].Всего   =GetFieldN(RSubobl,i,'Всего');
	  end;
	Finally
	  CloseWorkArea(RSubobl);
	End;
	if Кол>0 : -- Восстановление Страны и ГТД
	   ВосстНаименов;
	fi;
      Finally
	CloseWorkArea(Robl);
      End;
  fi;
  ВыводВалюты;
End;

proc ИмпортИзТорг12;
var ВыбрЗап:Record;
var Robl,RSubObl,НомЗап,i,Кол:Integer;
  ВыбрЗап=OpenCardFile('ТНакладная');
  if ВыбрЗап<>Nil:
      Robl=OpenWorkArea('ТНакладная','НомерБум','');
      Try

	-- Основная часть
	НомЗап=GetRecordNumber(Robl,ВыбрЗап);
	Рекв=GetFieldR(Robl,НомЗап,'Рекв');
	РеквП=GetFieldR(Robl,НомЗап,'ОТПРАВИТЕЛЬ');

	Валюта='РУБ';
	ВарНалПр=0;

	Покуп=РеквП.ПолнИмя;
	Адрес=РеквП.ФактАдрес;
	ИНН=РеквП.ИНН;
	КПП=РеквП.КПП;

	ГрузПол=Покуп+if(РеквП.ПочтАдрес<>'',','+РеквП.ПочтАдрес,'');

	ClearVariable(КолНаим);

	-- Табличная часть
	RSubObl=OpenArray(Robl,НомЗап,'ПОЗИЦИИ','');
	Try
	  кол=Records(RSubObl);
	  for i=1..кол do
	    InsertFrame(КолНаим,КолНаим+1);
	    КолНаим[i].Наим  =GetFieldS(RSubobl,i,'НАИМ');
	    КолНаим[i].Колич =GetFieldN(RSubobl,i,'Нетто');
	    КолНаим[i].Цена  =GetFieldN(RSubobl,i,'ЦЕНА');
	    КолНаим[i].НДС   =GetFieldN(RSubobl,i,'НДС');
	    КолНаим[i].ЕдИзм =GetFieldS(RSubobl,i,'ЕДИЗМ');
	    КолНаим[i].Сумма =GetFieldN(RSubobl,i,'Сумма');
	    КолНаим[i].СуммаНДС=GetFieldN(RSubobl,i,'СуммаНДС');
	    КолНаим[i].Всего   =GetFieldN(RSubobl,i,'СУМСНДС');
	  end;
	Finally
	  CloseWorkArea(RSubobl);
	End;
	if Кол>0 : -- Восстановление Страны и ГТД
	   ВосстНаименов;
	fi;
      Finally
	CloseWorkArea(Robl);
      End;
  fi;
  ВыводВалюты;
end;


proc ЗаполнитьСписок;
  ClearVariable(СписокДокументов);
  СписокДокументов[1]=' 	       Счета';
  СписокДокументов[2]=' 	     Накладной';
  СписокДокументов[3]=' 	      Торг-12';
end;


Proc Импорт(Об:String);
var  НомерВыбора:Integer;
  ЗаполнитьСписок;
  НомерВыбора=Alternate('Импорт из:',СписокДокументов,19);
  if НомерВыбора=1:
       ИмпортИзСчета;
    |НомерВыбора=2:
       ИмпортИзНакладной;
    |НомерВыбора=3:
       ИмпортИзТорг12;
  fi;
End;

func Контр(Об:String;Итер:Integer):Logical;
var temp:record;
var ПочтАдрес:String;
  if Об = "КорИмя" :
      temp=OpenCardFile("КонтрАгент","Наше");
      if temp<>nil:
	Рекв=temp;
      fi;
      ^False;
  |  Об = "Покуп" :
      if not chПертТекстПок :
	  if Итер<>-2: temp=OpenCardFile("КонтрАгент","Покупатель ИЛИ Дик");
	   else temp=Раб.Документы.ВыборСФильтром("КонтрАгент","ПолнИмя","Покупатель ИЛИ Дик");
	  fi;
	  if temp<>nil:
	      Адрес=GetCardFieldS("КонтрАгент",temp,"ЮРадрес");
	      ПочтАдрес=GetCardFieldS("КонтрАгент",temp,"ПочтАдрес");
	      Телефон=GetCardFieldS("КонтрАгент",temp,"телефон");
	      ИНН=GetCardFieldS("КонтрАгент",temp,"ИНН");
	      КПП=GetCardFieldS("КонтрАгент",temp,"КПП");
	      РеквП = temp;
	      Покуп=GetCardFieldS("КонтрАгент",temp,"ПолнИмя");
	      Аналит=CARDFILERECSIGN('КОНТРАГЕНТ','ПРИЗНАК','К',temp);
	      ГрузПол=Покуп+if(ПочтАдрес<>'',','+ПочтАдрес,'');
	  fi;
	  ^False;
       else ^True;
      fi;
  fi;
end; -- Контр

func ГрузОтпр_ПриОбзоре(Поле:String;Итер:Integer;Столб:Integer;Тек:String):String;
var ПочтАдрес,Получ,Рез:String;
var temp:Record;
  рез=ГрузОтпр;
  temp=OpenCardFile("КонтрАгент","НАШЕ");
  if temp<>nil:
    ПочтАдрес=GetCardFieldS("КонтрАгент",temp,"ПочтАдрес");
    Получ=GetCardFieldS("КонтрАгент",temp,"ПолнИмя");
    Рез=Получ+if(ПочтАдрес<>'',','+ПочтАдрес,'');
  fi;
  ^Рез;
end;


func ГрузПол_ПриОбзоре(Поле:String;Итер:Integer;Столб:Integer;Тек:String):String;
var ПочтАдрес,Покуп,Рез:String;
var temp:Record;
  рез=ГрузПол;
  temp=OpenCardFile("КонтрАгент","Покупатель ИЛИ Дик");
  if temp<>nil:
    ПочтАдрес=GetCardFieldS("КонтрАгент",temp,"ПочтАдрес");
    Покуп=GetCardFieldS("КонтрАгент",temp,"ПолнИмя");
    Рез=Покуп+if(ПочтАдрес<>'',','+ПочтАдрес,'');
  fi;
  ^Рез;
end;

Func ВыборСч(Об:String;Итер:Integer):Logical;
var Temp:String;
  Temp=ВыборСчета('*');
  if Temp<>'':Счет=Temp;fi;
  ^False;
End;

func ФИО_ПриВходе(Поле:String;Итер:Integer):Logical;
var tmp:record;
  tmp=OpenCardFile('Сотрудники','МОЛ');
  if tmp<>nil:
    if Поле='ФИОРук':
	Рук=tmp;
      |Поле='ФИОБух':
	Бух=tmp;
    fi;
  fi;
  ^false;
end;

Proc buClFind(Об:String);
var res :logical;
     res = Контр('Покуп',-2);
End; -- buClFind

Proc Ins (Об:String);
  ВставитьРамку(КолНаим,КолНаим+1);
end;

proc Del (Об:String);
var i:Integer;
  i=AsInteger(Шаблон.Кадр);
  УдалитьРамку(КолНаим,i);
end;

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

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

proc Пересчет(Клетка:String;Итер:Integer);
  if КолНаим=0:InsertFrame(КолНаим,КолНаим+1);fi;
  if Клетка="Цена" or Клетка="Колич" or Клетка="ЕдИзм":
      if КолНаим[Итер].ЕдИзм<>'%':
	КолНаим[Итер].Сумма=КолНаим[Итер].Колич*КолНаим[Итер].Цена;
      else
	КолНаим[Итер].Сумма=(КолНаим[Итер].Колич/100)*КолНаим[Итер].Цена;
      end;
      КолНаим[Итер].СуммаНДС=КолНаим[Итер].Сумма*КолНаим[Итер].НДС%;
      КолНаим[Итер].Всего=КолНаим[Итер].Сумма+КолНаим[Итер].СуммаНДС;
    |Клетка="НДС":
      КолНаим[Итер].СуммаНДС=КолНаим[Итер].Сумма*КолНаим[Итер].НДС%;
      КолНаим[Итер].Всего=КолНаим[Итер].Сумма+КолНаим[Итер].СуммаНДС;
    |Клетка="Всего":
      КолНаим[Итер].СуммаНДС=КолНаим[Итер].НДС/(100+КолНаим[Итер].НДС)*КолНаим[Итер].Всего;
      КолНаим[Итер].Сумма=КолНаим[Итер].Всего-КолНаим[Итер].СуммаНДС;
      КолНаим[Итер].Цена=КолНаим[Итер].Сумма/КолНаим[Итер].Колич;
  fi;
end;


Func ВыборПризнака(Об:String;Ит:Integer):Logical;
var tmp:String;
  tmp=ВыборПризнака('*.*');
  if tmp<>'':
    ДопАналит=tmp;
  fi;
 ^False;
End;

-- Пересчитывает валютную сумму в рублевую по курсу на дату
func ПересчетВРуб(СуммаВВалюте:Numeric;Валюта:String;ДКурса:Date):Numeric;
var res:Numeric;
  if Up(Валюта)<>'РУБ' and Валюта<>'':
    res=СуммаВВалюте*Com_Var("Курс."+Валюта,ДКурса);
  else
    res=СуммаВВалюте;
  fi;
  ^res;
end;

-- Пересчитывает рублевую сумму в валютную по курсу на дату
func ПересчетВВалюту(СуммаВРублях:Numeric;Валюта:String;ДКурса:Date):Numeric;
var res:Numeric;
  if Up(Валюта)<>'РУБ' and Валюта<>'':
    res=СуммаВРублях/Com_Var("Курс."+Валюта,ДКурса);
  else
    res=СуммаВРублях;
  fi;
  ^res;
end;


Proc ИзменениеСчетовФактур(Об:String);
  EditorApply;
  Раб.Бух.Сторнировать(Сделка);
End;

proc Пояснение_ПриНажатии(Кнопка:String);
  openblank('РАБ.ВСПОМБЛАНКИ.ПОЯСНЕНИЕ');
end;


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

Proc OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("","Документы.счета.счетфактуран.cfg");
end;


КОНЕЦ