БЛАНКСШАБЛОНОМ "Расходная накладная",
РЕДАКТОР Накладная;

ЦенаСНдс[]: Numeric = Позиции[$].Всего / Позиции[$].Колич;

а[]:String=СТР($);
ВсегоОтп:Numeric=СуммаМассива(Позиции[].Всего,Позиции);
ВсегоНДС:Numeric=СуммаМассива(Позиции[].СуммаНДС,Позиции);

ВсегоСЛО:String=if(ВсегоОтп=0,"",Раб.Бух.СуммаПрописью(ВсегоОтп,Валюта));
ВсегоСЛО1:String=if(ВсегоНДС=0,"","В т.ч. НДС "+Раб.Бух.СуммаПрописью(ВсегоНДС,Валюта));

RowNil :Integer = 10; -- Номер строки заголовка подтаблицы
СФильтром:Logical;


ТекстВалюта:String=if(Валюта='','РУБ',Валюта);

ВводПокупРучной:Logical; -- false - Покупатель из картотеки, true - ручной ввод покупателя

КорИмя:String=Рекв.ПолнИмя;
ТМ[]  :String=Позиции[$].ТМЦ.Признак;
ММ:String= МОЛ.ФАМИЛИЯ+' '+МОЛ.ИНИЦИАЛЫ;
Нал   :Integer=if(НалПр=0,0,1);

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

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

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

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

Кл:String='';

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

func MOLSEL(Об:String;Итер:Integer):Logical;
var temp:Record;
  temp=ОткрытьКартотеку("Сотрудники","МОЛ");-- ИЛИ Сотрудник");
  if temp<>nil:МОЛ=temp;fi;
  ^false;
end;


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


func Контр(Об:String;Итер:Integer):Logical;
var temp:record;
  If Об = "КорИмя" :
	  temp=ОткрытьКартотеку("Контрагент","Наше");
	  if temp<>nil:Рекв=temp;fi;
	  ^False;
  |  Об = "Пост" :
     if not ВводПокупРучной:
	temp=ОткрытьКартотеку('КонтрАгент','Покупатель ИЛИ ДИК');
	if temp<>nil:
	   Пост=Раб.Обл.GetCardS('КонтрАгент',temp,'ПолнИмя');
	   РеквП=temp;
	fi;
      else ^True;
	^False;
     fi;
  Fi;
end;



Proc ПроверкаСсылок;
var i:ц;
 for i=1..Позиции do
  if Позиции[i].ТМЦ<>nil :
    if Позиции[i].ТМЦС<" ":
	 Позиции[i].ТМЦС=Позиции[i].ТМЦ.Коммент;
	 Позиции[i].ЕдИзмС=Позиции[i].ТМЦ.ЕдИзм;
    end;
    if Позиции[i].ВидТМЦ = 0 :
      Позиции[i].ВидТМЦ= Позиции[i].ТМЦ.ВидТМЦ;
    end;
  fi;
 od;

End;

proc ПриСчитывании;
  If CurrentState = CrdusInserted :
      Дата=Сегодня;
      ДатОпер=Дата;
      if Рекв=nil:Рекв=РАБ.Обл.ПервЗапись("Контрагент","","Наше");fi;
      -- Заполнение служебных полей
      Расход	    = True;
      ТипОпер	    = 2;
      ПередачаДок = True;
      ПередачаТМЦ = True;
      Номер=Раб.Обл.СледСУчетомГода("Накладная","Номер","Дата");
      НомерБум=СТР(Номер);
      Валюта = БазоваяВалюта;
      if BlankExist("РАБ.ТСС.БИБ.SQL"):Изсистемы=2;fi;
  |True :
     If Рекв = Nil :
       Рекв=РАБ.Обл.ПервЗапись("Контрагент","","Наше");
     Fi;
     if позиции[1].ТМЦС<>" ":ПроверкаСсылок;fi;
     If НомерБум = "" :
       НомерБум=СТР(Номер);
     Fi;
     if CurrentState = CrdusModified :
       РедакторПрименить;
     end;
  fi;
END;

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

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

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

	-- Основная часть
	НомЗап=GetRecordNumber(Robl,ВыбрЗап);
	Рекв=GetFieldR(Robl,НомЗап,'Рекв');
	РеквП=GetFieldR(Robl,НомЗап,'РеквП');
	Пост=GetFieldS(Robl,НомЗап,"Покуп");
	Валюта=GetFieldS(Robl,НомЗап,"Валюта");

	-- Очищаем поля
	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].Сумма  =GetFieldN(RSubobl,i,'Сумма');
	    ПОЗИЦИИ[i].СуммаНДС=GetFieldN(RSubobl,i,'СуммаНДС');
	    ПОЗИЦИИ[i].Всего=GetFieldN(RSubobl,i,'Всего');
	  end;
	Finally
	  CloseWorkArea(RSubobl);
	End;
      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,НомЗап,"Валюта");
	ВарНалПр=GetFieldI(Robl,НомЗап,'ВарНалПр');
	НалПр=GetFieldN(Robl,НомЗап,'НалПр');

	-- Очищаем поля
	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;
	Finally
	  CloseWorkArea(RSubobl);
	End;
      Finally
	CloseWorkArea(Robl);
      End;
  fi;
End;

Proc ЗаполнитьСписок;
  ClearVariable(СписокДокументов);
  СписокДокументов[1]=' 	Счет-фактуры';
  СписокДокументов[2]=' 	      Счета';
End;

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


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

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

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

func Фильтр_ПриВходе(Поле:String;Итер:Integer):Logical;
  СФильтром=true;
  ВыборТовара_ПриВходе(Поле,Итер);
  СФильтром=false;
  ^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;
  ВводПокупРучной=not ВводПокупРучной;
  ^false;
end;

func Получ_ПриВходе(Поле:String;Итер:Integer):Logical;
var rec:record;
   rec=Раб.Документы.ВыборСФильтром('КонтрАгент','ПолнИмя','Покупатель ИЛИ Дик ИЛИ МОЛ');
   if rec<>nil:
      Пост=Раб.Обл.GetCardS('КонтрАгент',rec,'ПолнИмя');
      РеквП=rec;
   fi;
  ^false;
end;

func ВыборВалюты_Входе(Поле:String;Итер:Integer):Logical;
  Валюта=Раб.Бух.ВыбратьВалюту(Валюта);
  ^false;
end;

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


КОНЕЦ