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

var НомерИспр_:S=if(НомерИспр="","-",НомерИспр);

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

ОПЛАТА_:Integer=if(Аванс,1,if(Оплата=0,1,Оплата));

Номер_[]:Integer=if(Аванс,Ном,Оплата[$].НОМЕРД);
ДатаХ_[]:Date=if(Аванс,ДатаХ,Оплата[$].ДАТА);

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

флПост451:Object;
Пост451  :Logical;


СумДок:Numeric=if(Аванс and Пост451,0,СуммаМассива(КолНаим[].Сумма,КолНаим));
АкцДок:Numeric=if(Аванс and Пост451,0,СуммаМассива(СумА,КолНаим));
НДСДок:Numeric=СуммаМассива(КолНаим[].СуммаНДС,КолНаим);

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

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

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

КПППродавца:String=if(НАШЕПОДРАЗД=nil,Рекв.КПП,НАШЕПОДРАЗД.Реквизиты.КПП);

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

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

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

var СФильтром:Logical; -- Выбор ТМЦ с фильтром
var Текст:Integer;

нпВалюта:Object;-- отображение валюты
Валюта_:string=if(Валюта="USD":"Американский доллар, 840"|Валюта="EUR":"Единая европейская валюта, 978"|true:"Российский рубль, 643");

флАвансВернули:Object; -- Флаг возврата аванса;
редДатаВозврата:Object; -- редактор с датой возврата аванса
кнДатаВозврата:Object; -- кнопка выбора дата возврата аванса

флПрочеркИНН:Object;
ПрочеркИНН  :Logical;

флПрочеркОплаты:Object;
ПрочеркОплаты  :Logical;

УбратьИтоги:Logical=[false]; -- флаг "Убрать итоговые суммы столбцов 5 и 6"
ИтоговаяСтрокаБезСумм:Logical = УбратьИтоги;
ИтоговаяСтрокаССуммами:Logical = not УбратьИтоги;

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

ВыводНаим:Integer=[0];
КорИмя:Строка=if(ВыводНаим=1,Рекв.ПолнИмя,if(ВыводНаим=2,Рекв.КорИмя,Рекв.ПолнИмя+if(Пост451," / "+Рекв.КорИмя,"")));
--КорИмя:Строка=Рекв.ПолнИмя+if(Пост451," / "+Рекв.КорИмя,"");

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

Кл:String='';

НДСАВанс[]:String = if(КолНаим[$].НДС=0,if(НДС0,"0",'Без НДС'),str(КолНаим[$].НДС)+ "/" + str(100+КолНаим[$].НДС));

СекШапка    :Section;
СекГрузоотпр:Section;
СекГрузопол :Section;
СекКолНаим  :Section;
СекИНН      :Section;
СекОплата   :Section;

-- Положение колонок в таблице
КолонкаНДС:Integer=10;
КолонкаНДСАванс:Integer=11;
--

proc ФорматНДС;
  СекКолНаим.Cell(1,КолонкаНДС , CellFormat,if(НДС0,',##0%;;0%',',##0%;;##.Без НДС') );
  СекКолНаим.Cell(2,КолонкаНДС , CellFormat,if(НДС0,',##0%;;0%',',##0%;;##.Без НДС') );
end;

proc ВыводВалюты;
  Текст=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;

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;


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 ОтображениеОбьектов;
  флАвансВернули.visible=Аванс;
  редДатаВозврата.visible=Аванс;
  кнДатаВозврата.visible=Аванс;
end;

proc ОтображениеПост451;
--    if Пост451 then
--       СекШапка.Row(3,RowVisible,false);
--       СекШапка.Row(4,RowVisible,true);
--    else
--       СекШапка.Row(3,RowVisible,true);
--       СекШапка.Row(4,RowVisible,false);
--    end;

    СекГрузоотпр.Row(1,RowVisible,not Пост451 or not Аванс);
    СекГрузоотпр.Row(2,RowVisible,Пост451 and Аванс);

    СекГрузопол.Row(1,RowVisible,not Пост451 or not Аванс);
    СекГрузопол.Row(2,RowVisible,Пост451 and Аванс);

    СекКолНаим.Row(1,RowVisible,not Пост451 or not Аванс);
    СекКолНаим.Row(2,RowVisible,Пост451 and Аванс);
end;

Proc КнопРасч(Об:String);
  КнопИмпорт;
  ОтображениеОбьектов;
  if Аванс:
    Счет='62.1';
   else
    Счет='90.3';
  fi;
  -- Убираем столбец НДС в зависимости от аванса
  секКолНаим.Column(КолонкаНДС,ColVisible,not Аванс);
  секКолНаим.Column(КолонкаНДСАванс,ColVisible,Аванс);
  ОтображениеПост451;
end;


func ВыборВалюты(Поле:String; Iter:I):L;
  Валюта=Раб.Бух.ВыбратьВалюту(Валюта);
  ВыводВалюты;
  ^False;
end; -- ВыборВалюты


proc ПриСчитывании;
  ВыводНаим=0;
  If Раб.Обл.НоваяЗапись('СЧЕТФАКТ',Current):
      ПрочеркИНН    = false;
      ПрочеркОплаты = false;
      Счет='90.3';
      Дата=Сегодня;
      Номер=Раб.Обл.СледСУчетомГода("СчетФакт","Номер","Дата");
      НомерБум=СТР(Номер);
      if Рекв=nil:Рекв=РАБ.Обл.ПервЗапись("КонтрАгент","","Наше");fi;
      if Рекв<>nil:
        if ГрузОтпр='':
          ГрузОтпр=Рекв.ПолнИмя+if(Рекв.ПочтАдрес<>'',','+Рекв.ПочтАдрес,'');
        fi;
      fi;
      НРасчет=true;
      if Валюта='':Валюта="РУБ";fi;
      if BlankExist("РАБ.ТСС.БИБ.SQL"):Изсистемы=2;fi;
  | True :
      If НомерБум = "" :
      НомерБум=СТР(Номер);
      Fi;
      If Рекв = Nil :
       Рекв=РАБ.Обл.ПервЗапись("КонтрАгент","","Наше");
      Fi;
  Fi;
  if Дата>=09.06.2009:
     Пост451 = True;
     флПрочеркИНН.Enabled    = true;
     флПрочеркОплаты.Enabled = true;
  else
     Пост451 = False;
     флПрочеркИНН.Enabled    = false;
     флПрочеркОплаты.Enabled = false;
  fi;
  КнопИмпорт;
  ВыводВалюты;
  ДопИнфо_ПриИзменении('');
  ОтображениеОбьектов;
  ОтображениеПост451;
  -- Убираем столбец НДС в зависимости от аванса
  секКолНаим.Column(КолонкаНДС,ColVisible,not Аванс);
  секКолНаим.Column(КолонкаНДСАванс,ColVisible,Аванс);
  ФорматНДС;
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 АвансВернули and (ДатаВозврата=1.1.100 or ДатаВозврата<Дата):
     message('Неправильная дата возврата аванса.');
     шаблон.Object='редДатаВозврата';
     ^false;
   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 ВыборТовара_ПриВходе(Об:String;Итер:Integer):Logical;
var TMPRec:Record;
var Карт,Фильтр:String;
  if ТипВыбора=1: Карт="УчетКарточкаОС";фильтр="";
    |ТипВыбора=0:
       Карт="ТМЦ";
       if Раб.Сис.Ver69:
         Фильтр="";
       else
         Фильтр="Товар ИЛИ Материал ИЛИ Услуга";
       fi;
    |ТипВыбора=2:^True;
  else message("Выберите тип открываемой картотеки");^False;
  fi;
   If КолНаим = 0 :
          ВставитьРамку(КолНаим,КолНаим+1);
   Fi;
  if СФильтром: TMPRec=Раб.документы.ВыборСФильтром(Карт,"Коммент",Фильтр);
   else  TMPRec = ОткрытьКартотеку(Карт,Фильтр);
  fi;
   If TMPRec = NIL :  ^False;
     | True :
      If КолНаим = 0 :
        ВставитьРамку(КолНаим,КолНаим+1);
      Fi;
      if Карт="ТМЦ":
          Раб.Документы.TMSelect(TMPRec);
          КолНаим[Итер].ТМЦ=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 НомерИспр_OnVerify(FieldName: String; Iter: Integer; Value: String):Logical;
 НомерИспр=Value;
 FlagEdit=True;
 Return True;
end;

Proc НомерИспр_OnExit(FieldName: String; Iter: Integer);
 if FlagEdit:
    FlagEdit=False;
   else
    НомерИспр="";
 fi;
end;

func Контр(Об:String;Итер:Integer):Logical;
var temp:record;
var ПочтАдрес:String;
  if Об = "КорИмя" :
      temp=OpenCardFile("КонтрАгент","Наше");
      if temp<>nil:
        Рекв=temp;
        НашеПодразд=nil;
      fi;
      ^False;
  |  Об = "Покуп" :
      if not ВводПокупРучной:
          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; -- Контр

proc АвансВернули_ПриИзменении(Флаг:String);
  if АвансВернули and ДатаВозврата=1.1.100: ДатаВозврата=today;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 ВыборСч(Об:с;Итер: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 Отмена(Об:String);
  EditorCancel;
  Close;
end;

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

proc Docs(Об:String);
  Раб.Бух.Docs("Счета-фактуры","8_6");
end;

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

      КолНаим[Итер].Цена=КолНаим[Итер].Сумма/КолНаим[Итер].Колич;
  fi;
end;


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

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

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


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

func ДатаХ_ПриПроверке(Поле:String;Итер:Integer;Значение:Date):Logical;
  ДатаХ=Значение;
  ^true;
end;

func Номер_ПриПроверке(Поле:String;Итер:Integer;Значение:Integer):Logical;
  Ном=Значение;
  ^true;
end;

proc кнДатаВозврата_ПриНажатии(Кнопка:String);
var tmp:Date;
  tmp=Calendar(ДатаВозврата);
  if tmp<>1.1.100 :
    ДатаВозврата=tmp;
  fi;
end;


func КПППродавца_ПриВходе(Поле:String; Итер:Integer):Logical;
  НашеПодразд=OpenCardFile('Подразделения','',НашеПодразд);
  ГрузОтпр=НашеПодразд.Подраз+if(НашеПодразд.Адрес<>'',','+НашеПодразд.Адрес,'');
  ^false;
end;


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


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


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


var МассивСтрок[]:String;

func НДСАванс_ПриВходе(Клетка:String;Итер:Integer):Logical;
var Выбор:Integer;
  ClearVariable(МассивСтрок);
  if НДС0:
     МассивСтрок[1] = "                   0";
   | true:
     МассивСтрок[1] = "             Без НДС";
  fi;
  МассивСтрок[2] = "               10/110";
  МассивСтрок[3] = "               18/118";

  Выбор = Alternate("Проценты",МассивСтрок,18);
  If КолНаим = 0 :
     ВставитьРамку(КолНаим,КолНаим+1);
  Fi;
  if Выбор=1:
      КолНаим[Итер].НДС = 0;
    |Выбор=2:
      КолНаим[Итер].НДС = 10;
    |Выбор=3:
      КолНаим[Итер].НДС = 18;
  end;
  Пересчет("НДС",Итер);
  ^false;
end;

proc флПост451_ПриИзменении(Отправитель: String);
   ОтображениеПост451;
   if Пост451 = True then
     флПрочеркИНН.Enabled    = true;
     флПрочеркОплаты.Enabled = true;
    else
     флПрочеркИНН.Enabled    = false;
     флПрочеркОплаты.Enabled = false;
    fi;
end;

proc флПрочеркИНН_ПриИзменении(Отправитель: String);
    СекИНН.Row(1,RowVisible,not ПрочеркИНН);
    СекИНН.Row(2,RowVisible,ПрочеркИНН);
end;

proc флПрочеркОплаты_ПриИзменении(Отправитель: String);
    СекОплата.Row(1,RowVisible,not ПрочеркОплаты);
    СекОплата.Row(2,RowVisible,ПрочеркОплаты);
end;


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


Proc CheckBox4_OnChange(Sender: String);
  ФорматНДС;
end;



КОНЕЦ