БЛАНКСШАБЛОНОМ "Книга продаж",
Редактор КнигаПрод;
--РПО
--Замена картотеке
var СтрУпр:I;
var  ВСПК[]     :Integer;
var  КлючК[]     :String;
var  D0К[]        :DATE; --дата счета фактуры
var  ДНП0К[]      :STRING; --номер
var  ДНП0ИК[]     :STRING; --номер/дата изменения
var  ДНП0КорК[]   :STRING; --номер/дата корр.
var  ДНП0КИК[]    :STRING; --номер/дата изменения корр.

var  D2К[]        :DATE; --дата оплаты счета фактуры
var  D8К[]        :N; --сумма счета
var  РЕКВПК[]     :record; --ЮРЛИЦО; --Реквизиты контрагента
var  ПОКУПК[]      :STRING; --Название контрагента
var  ИННК[]       :STRING; --ИНН контрагента
var  КППК[]       :STRING; --КПП контрагента
var  ТИПСТРК[]   :Integer;
var  STO1К[]      :N; --сумма НДС 20%
var  STO18К[]     :N; --сумма НДС 18%
var  STO2К[]      :N; --сумма НДС 10%
var  SUM1К[]      :N; --сумма НДС 20%
var  SUM18К[]     :N; --сумма НДС 18%
var  SUM2К[]      :N; --сумма НДС 10%
var  STO3К[]      :N; --сумма по ставке 0 процентов
var  SUM3К[]      :N; --сумма при ставке НДС 0%
var  КОММЕНТК[]   :STRING; --комментарий к уменьшаемым суммам
var  СЧЕТК[]   :STRING; --Корреспондирующий счет
var  АНПОКК[] :STRING; --Аналитика
var  АВАНСК[]     :L; --Авансовая с.ф.

var D0_[] :String;

СчетДляПроводок:String='';
СчетДляПроводокАванс:String='';

кнСФ:String='';

ИмяИзПодразделения:String=if(НашеПодразд<>nil,НашеПодразд.Подраз,Рекв.ПолнИмя);

ИМЯИЗПОДРАЗДЕЛЕНИЯ_:L;
БезПодразделений_:L;
--ПоОплате_:L;
НеСторнировать_:L;
ПечататьСчета_:L;

ИмяПродавца:String=if(ИМЯИЗПОДРАЗДЕЛЕНИЯ_,ИмяИзПодразделения,Рекв.ПолнИмя);
КПППродавца:String=if(НАШЕПОДРАЗД=nil,Рекв.КПП,НАШЕПОДРАЗД.Реквизиты.КПП);

БезНДС18[]:Numeric=if(КНПро[$].Аванс,0,КНПро[$].Сто18);
БезНДС10[]:Numeric=if(КНПро[$].Аванс,0,КНПро[$].Сто2);

ВСум[]:Numeric=КнПро[$].У-КнПро[$].Сто1-КнПро[$].Сто18-КнПро[$].Сум1-КнПро[$].Сум18-КнПро[$].Сто2-КнПро[$].Сум2-КнПро[$].Сум3;
У_[]:Numeric=КНПро[$].У;
Сум18_[]:Numeric=КНПро[$].Сум18;
Сум2_[]:Numeric=КНПро[$].Сум2;
Сум3_[]:Numeric=КНПро[$].Сум3;
Сто1_[]:Numeric=КНПро[$].Сто1;
Сум1_[]:Numeric=КНПро[$].Сум1;

ВСумВх:Numeric=Днп8Вх-Сто1Вх-Ст18Вх-Сум1Вх-Сум18Вх-Ст2Вх-Сум2Вх-Сум3Вх;
ВСумо:Numeric=СуммаМассива(ВСум,КнПро)+ВСумВх;

Днп8о :Numeric = СуммаМассива(КнПро[].У,КнПро)   +Днп8Вх;
Сто1о :Numeric = СуммаМассива(КнПро[].Сто1,КнПро)+Сто1Вх;
Сто18о:Numeric = СуммаМассива(БезНДС18,КнПро)+Сто18Вх;
Сум1о :Numeric = СуммаМассива(КнПро[].Сум1,КнПро)+Сум1Вх;
Сум18о:Numeric = СуммаМассива(КнПро[].Сум18,КнПро)+Сум18Вх;
Сто2о :Numeric = СуммаМассива(БезНДС10,КнПро)+Сто2Вх;
Сум2о :Numeric = СуммаМассива(КнПро[].Сум2,КнПро)+Сум2Вх;
Сум3о :Numeric = СуммаМассива(КнПро[].Сум3,КнПро)+Сум3Вх;
Capa[]:N=if($=1:Днп8о|$=2:Сто18о|$=3:Сум18о|$=4:Сто2о|$=5:Сум2о|$=6:Сум3о|$=7:Сто1о|$=8:Сум1о|$=9:ВСумо|
            $=10:Днп8Вх|$=11:Сто18Вх|$=12:Сум18Вх|$=13:Сто2Вх|$=14:Сум2Вх|$=15:Сум3Вх|$=16:Сто1Вх|$=17:Сум1Вх|$=18:ВСумВх);

var Add:S=if(Проводить,"","+");
var Del:S=if(Проводить,"","-");
Оплата:Logical=False; -- Формировать по оплате
СортироватьПоОплате:Logical; -- сортировать по дате оплаты.
кнЗаполнение:Object;
флСортПоОплате:Object;
флДопЛист:Object;

--ТекстПредыдущимСумм:String=if(ДополнительныйЛист,'Итого','Перенесено с предыдущего листа');
--ШапкаПродажаЗаПериод:Integer=if(ДополнительныйЛист,0,1);
--ШапкаКнигаПродаж:Integer=if(ДополнительныйЛист,0,1);
--ШапкаДОПКнигаПродаж:Integer=if(ДополнительныйЛист,1,0);
--ШапкаДоп:Integer=if(ДополнительныйЛист,1,0);

-- Это нужно, что бы при указании даты первого дня месяца считалось по этот день не включительно, а
-- при указании последнего дня месяца считалось включительно. Нужно только для отбора с.ф.
ДатаКФильтр:Date=if(Mon(ДатаК+1)<>Mon(ДатаК),ДатаК+1,ДатаК);
-----------------------------


ТекстШапки1:String=if(ДополнительныйЛист,
                      "Утвержден постановлением Правительства Российской Федерации",
--                      "Приложение № 5 к Правилам ведения журналов учета полученных и выставленных счетов-фактур, книг покупок и книг продаж при расчетах",
                      "Приложение N 5 к постановлению Правительства Российской Федерации");
                      --"Приложение № 3 к Правилам ведения журналов учета полученных и выставленных счетов-фактур, книг покупок и книг продаж при расчетах");
ТекстШапки2:String="от 26 декабря 2011 г. N 1137";
--if(ДополнительныйЛист,
--                      "по налогу на добавленную стоимость (в ред. Постановления Правительства РФ от 11.05.2006 № 283)",
--                      "по налогу на добавленную стоимость, утвержденным Постановлением Правительства РФ от 02.12.2000 № 914 (в ред. Постановлений Правительства РФ от 16.02.2004 № 84, от 26.05.2009 № 451)");

var D8ДИзм    :Numeric;
var Сто1ДИзм  :Numeric;
var Сто18ДИзм :Numeric;
var Сум1ДИзм  :Numeric;
var Сум18ДИзм :Numeric;
var Сто2ДИзм  :Numeric;
var Сум2ДИзм  :Numeric;
var Сум3ДИзм  :Numeric;

ПокупТекст:Logical;
var Page:I=Nстр;
S1:Section;
S1a:Section;
S2:Section;
S3:Section;
S4:Section;
S5:Section;
S6:Section;
S7:Section;
Шапка:Section; -- шапка таблицы
SНеПервый2:Section; -- шапка таблицы
SНеПервый_:Section; -- шапка таблицы
var Сек[]:S;
var nS:I=16;
Proc СекЗап;
var i:I;
  for i=1..7 do
    Сек[i]="S"+Str(i);
  od;
  Сек[8]="S1a";
  Сек[9]="Шапка";
  Сек[10]="SНеПервый2";
  Сек[11]="SНеПервый_";
  Сек[12]="Позиции";
  Сек[13]="SIt";
  Сек[14]="SSub";
  Сек[15]="SSub1";
  Сек[16]="SSub2";
end;

Позиции:Section; -- позиции с с.ф.
SIt:Section;
SSub:Section;
SSub1:Section;
SSub2:Section;

var selfBln:S="ДОКУМЕНТЫ.СЧЕТА.КНПРО";
var SelfCfg:S="ДОКУМЕНТЫ.СЧЕТА.КНПРО.000.cfg";

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

func Рендер:I;
var tmpL:L;
var res:I;
  Раб.Вспом.Печать2.SelfCfg=SelfCfg;
  Раб.Вспом.Печать2.Инициализация(SelfBln,"S7@S1@S1a@S2@S3@S4@S5@S6@Шапка@SНеПервый2@SНеПервый_@Позиции@SIt@SSub@SSub1@SSub2");

  Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S7");
  if ДополнительныйЛист:
     Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S1a");
    else
     Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S1");
  fi;
  Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S2");
  Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S3");
  if ДополнительныйЛист:
     Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S5");
     Раб.Вспом.Печать2.ВывестиСекцию(SelfBln,"S6");
  fi;

  res=Раб.Вспом.Печать2.ВывестиТаблицу(SelfBln,"S4#3@Шапка#3@"+if(ДополнительныйЛист,"SНеПервый_#2@","")+"SНеПервый2#1","Позиции","SIt#5","SSub@SSub1@SSub2",-1,"У_@БезНДС18@Сум18_@БезНДС10@Сум2_@Сум3_@Сто1_@Сум1_@ВСум@У_@БезНДС18@Сум18_@БезНДС10@Сум2_@Сум3_@Сто1_@Сум1_@ВСум");
  ^res;
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],Obj):
     rr=asInteger(Obj.RowsCount);
     cc=asInteger(Obj.ColsCount);
     for r=1 ..rr  do
      for c=1 ..cc  do
       BgColor=asInteger(Obj.Cell(r,c,CellBgColor,""));
       if BgColor=coAqua or BgColor=coTeal:
          Field=asString(Obj.Cell(r,c,CellContents,""));
          if SearchInArray(BufField,Field,True)=-1:
             n=InsertInArraySort(BufField,Field); 
             InsertInArray(BufColorBg,n,BgColor);
          fi;
       fi;
      od;
     od;
  fi;
 od;
 l=LengthOfArray(BufField);
 for n=1..l do
  if BufColorBg[n]=coTeal: BufColorFo[n]=coWhite;
    |True: BufColorFo[n]=coBlack;
  fi;
 od;
end;

proc Оформление;
--var НеПервый:Logical;
--  НеПервый= D8Вх <> 0 or D8Вх<>0 or Sto18Вх<>0 or Sum18Вх<>0 or Sto2Вх<>0 or Sum2Вх<>0 or Sum3Вх<>0 or Sto1Вх<>0 or Sum1Вх<>0 ;
--  SНепервый2.Visible=( and not ДополнительныйЛист);
var Obj:Object;
var s,r,rr,c,cc,n,bgColor:i;
var Field:S;

  кнЗаполнение.Enabled=not проводить;
  S1.Visible=not ДополнительныйЛист;
  S1a.Visible=ДополнительныйЛист;
  S4.Visible=not ДополнительныйЛист;
  S5.Visible=ДополнительныйЛист;
  S6.Visible=ДополнительныйЛист;
  SНеПервый_.Visible=ДополнительныйЛист;
  SНеПервый2.Visible=Page>1 and not ДополнительныйЛист;
  for s=1..nS do
   if FindObject(Сек[s],Obj):
      rr=asInteger(Obj.RowsCount);
      cc=asInteger(Obj.ColsCount);
      for r=1 .. rr do
       for c=1 .. cc do
        Field=asString(Obj.Cell(r,c,CellContents,""));
        n=SearchInArray(BufField,Field,True);
        if not n=-1:
           if not asInteger(Obj.Cell(r,c,CellFieldType,""))=1:
              if Проводить:
                 Obj.Cell(r,c,CellFontColor,coBlack);
                 Obj.Cell(r,c,CellBgColor,coTransparent);
                 Obj.Cell(r,c,CellReadOnly,True);
                else
                 Obj.Cell(r,c,CellFontColor,BufColorFo[n]);
                 Obj.Cell(r,c,CellBgColor,BufColorBg[n]);
                 Obj.Cell(r,c,CellReadOnly,False);
              fi;
           fi;
        fi;
       od;
      od;
   fi;
  od;
end;

Proc ПослеИзменений(Об:String;Итер:Integer);
 if Об="БезНДС18":КНПро[Итер].Сто18=БезНДС18[Итер];
   |Об="БезНДС10":КНПро[Итер].Сто2=БезНДС10[Итер];
 fi;
End; -- ПослеИзменений

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

proc Ok(Об:String);
  EditorApply;
  Close;
end;

НеПервый:Logical = Днп8Вх<>0 or Сто18Вх<>0 or Сум18Вх <>0 or Сто2Вх <>0 or Сум2Вх<>0 or Сум3Вх<>0 or Сто1Вх<>0 or Сум1Вх <>0 or ДополнительныйЛист;

КартФильтр:Logical;

var D8ВхПер:Numeric;
var Sto1ВхПер:Numeric;
var Sto18ВхПер:Numeric;
var Sum1ВхПер:Numeric;
var Sum18ВхПер:Numeric;
var Sto2ВхПер:Numeric;
var Sum2ВхПер:Numeric;
var Sum3ВхПер:Numeric;

Func TMSEL(Об:String;Итер:Integer):Logical;
Var TmRec:Record;
  If КнПро = 0 : ВставитьРамку(КнПро,КнПро+1); Fi;
  if not ПокупТекст:
    if КартФильтр:
       TmRec=Раб.Документы.ВыборСФильтром('КонтрАгент','КорИмя','Покупатель');
     else
     TmRec=ОткрытьКартотеку("КонтрАгент","Покупатель");
    fi;
     if TmRec<>nil:
         КнПро[Итер].покуп=GetCardFieldS("КонтрАгент",TmRec,'КорИмя');
         КнПро[Итер].ИНН=GetCardFieldS("КонтрАгент",TmRec,"ИНН");
         КнПро[Итер].КПП=GetCardFieldS("КонтрАгент",TmRec,"КПП");
         КнПро[Итер].АнПок=CARDFILERECSIGN('КОНТРАГЕНТ','ПРИЗНАК','К',TmRec);
     fi;
    ^False;
   else ^True;
  fi;
  КнПро[Итер].ТипСтр=3;
end; -- TMSEL


var НомерЗаписи:Integer; -- Номер последней записи
var НомерСтр   :Integer; -- Номер текущей страницы
var НомерЗСтр  :Integer; -- Номер записи страницы
var КолСтр     :Integer; -- Количество страниц
var уз   :Numeric;      --
var Сто1з:Numeric;      -- -
var Сто18з:Numeric;      -- -
var Сто2з:Numeric;      -- - - Подсчитанные итоги
var Ст18з:Numeric;
var Ст2з :Numeric;
var Сум1з:Numeric;      -- -
var Сум18з:Numeric;      -- -
var Сум2з:Numeric;      --
var Сум3з:Numeric;      --
var RSub :Integer;      -- Текущая рабочая область подтаблицы

-- Пересчитывает валютную сумму в рублевую по курсу на дату
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 ВСтр(Дата:Date;Номер:String;НомерИ:String;НомерКор:String;НомерКИ:String;Покуп:String;АНПОК:String;ИНН:String;КПП:String;
          Реквп:Record;Датах:DATE;У:Numeric;STO1:Numeric;STO18:Numeric;STO2:Numeric;SUM1:Numeric;SUM18:Numeric;
          SUM2:Numeric;SUM3:Numeric;Счет:String;КОММЕНТ:String;Аванс:Logical;ТИПСТР:Integer);
var Зап:Integer;
var Ключ_:String;
  Ключ_=ПОКУП+DateToString(Дата)+Номер+"###"+НомерКор;
  Зап=SearchInArray(КлючК,Ключ_);
  if Зап=-1:
     InsertFrame(СтрУпр,if(СтрУпр=0,1,СтрУпр+1));
     Зап=стрУпр;
     КлючК[Зап]=Ключ_;
     D8К[Зап]=У;
     STO1К[Зап]=STO1;
     STO18К[Зап]=STO18;
     STO2К[Зап]=STO2;
     SUM1К[Зап]=SUM1;
     SUM18К[Зап]=SUM18;
     SUM2К[Зап]=SUM2;
     SUM3К[Зап]=SUM3;
  else
     D8К[Зап]=D8К[Зап]+У;
     STO1К[Зап]=STO1К[Зап]+STO1;
     STO18К[Зап]=STO18К[Зап]+STO18;
     STO2К[Зап]=STO2К[Зап]+STO2;
     SUM1К[Зап]=SUM1К[Зап]+SUM1;
     SUM18К[Зап]=SUM18К[Зап]+SUM18;
     SUM2К[Зап]=SUM2К[Зап]+SUM2;
     SUM3К[Зап]=SUM3К[Зап]+SUM3;
  fi;
  --Эти элементы должны либо совпадать, либо браться по последнему
  D0К[Зап]=Дата;
  D2К[Зап]=ДатаХ;
  ДНП0К[Зап]=Номер;
  ДНП0ИК[Зап]=НомерИ;
  ДНП0КорК[Зап]=НомерКор;
  ДНП0КИК[Зап]=НомерКИ;
  ПОКУПК[Зап]=ПОКУП;
  АНПОКК[Зап]=АНПОК;
  ИННК[Зап]=ИНН;
  КППК[Зап]=КПП;
  if РеквП<>nil: РеквПК[Зап]=РеквП; fi;
  КомментК[Зап]=Коммент;
  СчетК[Зап]=Счет;
  АвансК[Зап]=Аванс;
  ВСПК[Зап]=2;
  ТИПСТРК[Зап]=ТИПСТР;
  --Если полная сумма равна нулю - удаляем
  if D8К[Зап]+STO1К[Зап]+STO18К[Зап]+STO2К[Зап]+SUM1К[Зап]+SUM18К[Зап]+SUM2К[Зап]+SUM3К[Зап]=0:
     DeleteFrame(СтрУпр,Зап);
  fi;
End;

-- Переносит итоги из предыдущих периодов книги продаж
Proc ПодсчетДляНовойСтраницы(НомСтр:Integer);
var Rob,RSubOb,i,КолЗап:Integer;
  D8ВхПер=0;
  Sto1ВхПер=0;
  Sto18ВхПер=0;
  Sum1ВхПер=0;
  Sum18ВхПер=0;
  Sto2ВхПер=0;
  Sum2ВхПер=0;
  Sum3ВхПер=0;
--  Днп8Вх=0;Сто18Вх=0;Сум18Вх=0;Сто2Вх=0;Сум2Вх=0;Сум3Вх=0;Сто1Вх=0;Сум1Вх=0;
  Rob=OpenWorkArea("КнигаПрод","NСтр","ДатаН="+DateToString(ДатаН)+" and ДатаК="+DateToString(ДатаК)+" and Nстр="+Стр(НомСтр)
--                   +if(ДополнительныйЛист,' and ДополнительныйЛист',' and not ДополнительныйЛист')
                   +if(НашеПодразд<>nil,' and НашеПодразд='+RecordToString(НашеПодразд),''));

  Try
   RSubOb=OpenArray(Rob,1,"КНПро","");
   Try
     КолЗап=Records(RSubob);
     for i=1..КолЗап do
      D8ВхПер=D8ВхПер+GetFieldN(RSubOb,i,      "У");
      Sto1ВхПер=Sto1ВхПер+GetFieldN(RSubOb,i,  "Сто1");
      Sto18ВхПер=Sto18ВхПер+GetFieldN(RSubOb,i,"Сто18");
      Sum1ВхПер=Sum1ВхПер+GetFieldN(RSubOb,i,  "Сум1");
      Sum18ВхПер=Sum18ВхПер+GetFieldN(RSubOb,i,"Сум18");
      Sto2ВхПер=Sto2ВхПер+GetFieldN(RSubOb,i,  "Сто2");
      Sum2ВхПер=Sum2ВхПер+GetFieldN(RSubOb,i,  "Сум2");
      Sum3ВхПер=Sum3ВхПер+GetFieldN(RSubOb,i,  "Сум3");
     od;
      D8ВхПер=D8ВхПер+GetFieldN(ROb,1,      "Днп8Вх");
      Sto1ВхПер=Sto1ВхПер+GetFieldN(ROb,1,  "Сто1Вх");
      Sto18ВхПер=Sto18ВхПер+GetFieldN(ROb,1,"Сто18Вх");
      Sum1ВхПер=Sum1ВхПер+GetFieldN(ROb,1,  "Сум1Вх");
      Sum18ВхПер=Sum1ВхПер+GetFieldN(ROb,1, "Сум18Вх");
      Sto2ВхПер=Sto2ВхПер+GetFieldN(ROb,1,  "Сто2Вх");
      Sum2ВхПер=Sum2ВхПер+GetFieldN(ROb,1,  "Сум2Вх");
      Sum3ВхПер=Sum3ВхПер+GetFieldN(ROb,1,  "Сум3Вх");
   Finally
    CloseWorkArea(RSubOb);
   End;
  Finally
   CloseWorkArea(Rob);
  End;
End;


Proc Поисквкниге;
var OWA,OA,n1,nn1,n2,nn2,i:I;
Var t,t1:N;

  --Выгребаем из книг
  OWA=OpenWorkArea("Книгапрод","NСТР","ДатаН="+DateToString(ДатаН)+" and ДатаК="+DateToString(ДатаК)+" and Проводить");
  try
    nn1=records(Owa);
    for n1=1 to nn1 do
      Oa=OpenArray(OWA,n1,"КнПро","");
      try
        nn2=Records(OA);
        if nn2<>0 then ДополнительныйЛист=True; fi;
        for n2=1 to nn2 do
            ВСтр(GetFieldD(OA,n2,"Дата"),GetFieldS(OA,n2,"Номер"),GetFieldS(OA,n2,"ДНП0И"),GetFieldS(OA,n2,"ДНП0КОР"),GetFieldS(OA,n2,"ДНП0КИ"),
                GetFieldS(OA,n2,"Покуп"),GetFieldS(OA,n2,"АнПок"),GetFieldS(OA,n2,"ИНН"),GetFieldS(OA,n2,"КПП"),nil,GetFieldD(OA,n2,"ДатаХ"),
                -1*GetFieldN(OA,n2,"У"),-1*GetFieldN(OA,n2,"СТО1"),-1*GetFieldN(OA,n2,"СТО18"),-1*GetFieldN(OA,n2,"СТО2"),
                -1*GetFieldN(OA,n2,"СУМ1"),-1*GetFieldN(OA,n2,"СУМ18"),-1*GetFieldN(OA,n2,"СУМ2"),-1*GetFieldN(OA,n2,"СУМ3"),
                GetFieldS(OA,n2,"СЧЕТ"),'',GetFieldL(OA,n2,"Аванс"),GetFieldI(OA,n2,"ТИПСТР"));

        od;
      finally
        CloseWorkarea(OA);
      end;
      if n1=nn1 then
         NСТР=getfieldI(OWA,n1,"NСТР")+getfieldI(OWA,n1,"NСТРаниц");
         ПодсчетДляНовойСтраницы(NСТР-1);
         Днп8Вх=D8ВхПер;
         Сто1Вх=Sto1ВхПер;
         Сто18Вх=Sto18ВхПер;
         Сум1Вх=Sum1ВхПер;
         Сум18Вх=Sum18ВхПер;
         Сто2Вх=Sto2ВхПер;
         Сум2Вх=Sum2ВхПер;
         Сум3Вх=Sum3ВхПер;
      fi;

    od;
  finally
    CloseWorkArea(OWA);
  end;
end;
-- Формирует по отгрузке в вспомогательную картотеку (за место процедуры СформироватьПоОтгрузке)
proc СформироватьПоОтгрузкеВКартотеку;
var Robl:Integer;
var Аванс,НДС0:Logical;
var СФКор:L;
var У,Сто1,Сто18,Сум1,Сум18,Сто2,Сум2,Сум3:Numeric;
var ПокупП,ИННП,КППП,НомерП,НомерПИ,НомерПКор,НомерПИК,Аналит:String;
var ДатаП,ДатаХП:Date;
var tmps:String;
var ВалСФ:String; -- Валюта с.ф.
var СчетСФ:String;-- счет из счет-фактуры
var КолСФ,i,КолСтрВставить:Integer;
var Фильтр:String;

var OA:I;
var j,jj:I;
var Tmp1,Tmp2,Tmp3,Tmp4,Tmp5,Tmp6,Tmp7:Numeric;

  hint('Поиск с.ф. по отгрузке.');
  КолСтрВставить=Раб.Сис.КолСтрок;
  Фильтр="Проводить and Дата>="2+0РАБ.ФОРМАТ.ДАТАСТР(ДатаН,4)+" and  Дата<"2+0РАБ.ФОРМАТ.ДАТАСТР(ДатаКФильтр,4)
         +if(ФильтрАналитики<>""," and Pos('"+ФильтрАналитики+"',ДопАналит)>0","")
         +if(НАШЕПОДРАЗД<>nil,' and НАШЕПОДРАЗД='+RecordToString(НашеПодразд),if(БезПодразделений_,' and НАШЕПОДРАЗД=nil',''));

  Robl=OpenWorkArea("СЧЕТФАКТ","Дата;Номер",Фильтр);
  Try
    КолСФ=Records(Robl);
    for i=1..КолСФ do

      ДатаП =GetFieldD(Robl,i,'Дата');
      tmps=GetFieldS(Robl,i,'АнКод');
      Аналит=GetFieldS(Robl,i,'Аналит')+if(tmps<>'':' СФН.'+tmps,'')+' '+GetFieldS(Robl,i,'ДопАналит');
      НомерП=GetFieldS(Robl,i,'НомерБум');
      НомерПИ=GetFieldS(Robl,i,'НОМЕРИСПР');
      НомерПКор=GetFieldS(Robl,i,'НОМЕРБУМК');
      НомерПИК=GetFieldS(Robl,i,'НОМЕРИСПРК');
      СФКор=НомерПКор<>"";

      ДатаХП=GetFieldD(Robl,i,'ДатаХ');
      ПокупП=GetFieldS(Robl,i,'Покуп');
      ИННП  =GetFieldS(Robl,i,'ИНН');
      КППП  =GetFieldS(Robl,i,'КПП');
      НДС0  =GetFieldL(Robl,i,'НДС0');
      СчетСФ=GetFieldS(Robl,i,'Счет');
      Аванс =GetFieldL(Robl,i,'Аванс');
      ВалСФ =GetFieldS(Robl,i,'Валюта');

      У     =ПересчетВРуб(GetFieldN(Robl,i,'ВсегоДок'),ВалСФ,ДатаП);
      СТО1  =ПересчетВРуб(GetFieldN(Robl,i,'Сто1'),ВалСФ,ДатаП);
      СТО18 =ПересчетВРуб(GetFieldN(Robl,i,'Сум18'),ВалСФ,ДатаП);
      Сум1  =ПересчетВРуб(GetFieldN(Robl,i,'Сум1'),ВалСФ,ДатаП);
      Сум18 =ПересчетВРуб(GetFieldN(Robl,i,'Сто18'),ВалСФ,ДатаП);
      Сто2  =ПересчетВРуб(GetFieldN(Robl,i,'Сум2'),ВалСФ,ДатаП);
      Сум2  =ПересчетВРуб(GetFieldN(Robl,i,'Сто2'),ВалСФ,ДатаП);
      Сум3  =if(GetFieldL(Robl,i,'НДС0'),У-(СТО1+Сум1+Сто2+Сум2),0);
      ВСтр(ДатаП,НомерП,НомерПИ,НомерПКор,НомерПИК,ПокупП,Аналит,ИННП,КППП,GetFieldR(Robl,i,'РЕКВП'),ДатаХП,
           У,СТО1,СТО18,СТО2,СУМ1,СУМ18,СУМ2,СУМ3,
           if(Аванс,if(счетсф='',СчетДляПроводокАванс,СчетСФ),if(СчетСФ='',СчетДляПроводок,СчетСФ)),
           '',GetFieldL(Robl,i,'Аванс'),if(Аванс,1,3));

      if СФКор:
         OA=OpenArray(Robl,i,"КолНаим","");
         try
            Tmp1=0;
            Tmp2=0;
            Tmp3=0;
            Tmp4=0;
            Tmp5=0;
            Tmp6=0;
            Tmp7=0;
            jj=Records(OA);
            For j=1..jj Do
              Tmp1=Tmp1+GetFieldN(OA,j,"ВсегоДО");
              if Round(GetFieldN(OA,j,"НДС")) = 18:
                 Tmp6    =Tmp6+GetFieldN(OA,j,"СуммаНДСДО");
                 Tmp7    =Tmp7+if(not GetFieldL(Robl,i,'Аванс'),GetFieldN(OA,j,"СуммаДО"),GetFieldN(OA,j,"ВсегоДО")-GetFieldN(OA,j,"СуммаНДСДО"));
              |Round(GetFieldN(OA,j,"НДСДО")) <> 10 and  GetFieldN(OA,j,"НДСДО") <> 0 and GetFieldN(OA,j,"НДСДО") <> 9.09:
                Tmp2    =Tmp2+GetFieldN(OA,j,"СуммаНДСДО");
                Tmp4    =Tmp4+if(not GetFieldL(Robl,i,'Аванс'),GetFieldN(OA,j,"СуммаДО"),GetFieldN(OA,j,"ВсегоДО")-GetFieldN(OA,j,"СуммаНДСДО"));
              |Round(GetFieldN(OA,j,"НДСДО")) = 10 or GetFieldN(OA,j,"НДСДО") = 9.09:
                Tmp3    =Tmp3+GetFieldN(OA,j,"СуммаНДСДО");
                Tmp5    =Tmp5+if(not GetFieldL(Robl,i,'Аванс'),GetFieldN(OA,j,"СуммаДО"),GetFieldN(OA,j,"ВсегоДО")-GetFieldN(OA,j,"СуммаНДСДО"));
              Fi;
            Od;
            У  =ПересчетВРуб(Tmp1,ВалСФ,ДатаП);
            СТО1  =ПересчетВРуб(Tmp2,ВалСФ,ДатаП);
            СТО18 =ПересчетВРуб(Tmp7,ВалСФ,ДатаП);
            Сум1  =ПересчетВРуб(Tmp4,ВалСФ,ДатаП);
            Сум18 =ПересчетВРуб(Tmp6,ВалСФ,ДатаП);
            Сто2  =ПересчетВРуб(Tmp3,ВалСФ,ДатаП);
            Сум2  =ПересчетВРуб(Tmp5,ВалСФ,ДатаП);
            Сум3  =if(GetFieldL(Robl,i,'НДС0'),У-(СТО1+Сум1+Сто2+Сум2),0);
            ВСтр(ДатаП,НомерП,НомерПИ,"","",ПокупП,Аналит,ИННП,КППП,GetFieldR(Robl,i,'РЕКВП'),ДатаХП,
                 -1*У,-1*СТО1,-1*СТО18,-1*СТО2,-1*СУМ1,-1*СУМ18,-1*СУМ2,-1*СУМ3,
                 if(Аванс,if(счетсф='',СчетДляПроводокАванс,СчетСФ),if(СчетСФ='',СчетДляПроводок,СчетСФ)),
                 '',GetFieldL(Robl,i,'Аванс'),if(Аванс,1,3));
         finally
           CloseWorkArea(OA);
         end;
      fi;

    end;
   hint('Сохранение найденных с.ф.');
  Finally
    CloseWorkArea(Robl);
  End;
end;

proc СформироватьПоСторноСФПоставщика;
var Robl,Robl2:Integer;
var КолСФ,i,КолСтрВставить:Integer;
var Фильтр:String;
var ВДата,ВДатаХ :Date;
var ВНомер,ВПокуп,ВИНН,ВКПП,ВСЧЕТ,ВКОММЕНТ,ВАНПОК:String;
var ВУ,ВСТО1,ВСТО18,ВСТО2,ВСУМ1,ВСУМ18,ВСУМ2,ВСУМ3:Numeric;
var БезПодразделений:Logical; -- Отбирать с.ф. только без подразделений

  БезПодразделений=БезПодразделений_;

  hint('Поиск сторно записей с.ф. поставщиков.');
  КолСтрВставить=Раб.Сис.КолСтрок;
  Фильтр="ДатаВ>="2+0РАБ.ФОРМАТ.ДАТАСТР(ДатаН,4)+" and  ДатаВ<"2+0РАБ.ФОРМАТ.ДАТАСТР(ДатаКФильтр,4)
         +if(НАШЕПОДРАЗД<>nil,' and НАШЕПОДРАЗД='+RecordToString(НашеПодразд),if(БезПодразделений,' and НАШЕПОДРАЗД=nil',''));

  Robl=OpenWorkArea("Сторно_СФПост","Дата;Номер",Фильтр);
  Try
    КолСФ=Records(Robl);
    for i=1..КолСФ do

      ВДАТА   = GetFieldD(Robl,i,'Дата');
      ВНОМЕР  = GetFieldS(Robl,i,'Номер');
      ВПОКУП  = GetFieldS(Robl,i,'Покуп');
      ВИНН    = GetFieldS(Robl,i,'ИНН');
      ВКПП    = GetFieldS(Robl,i,'КПП');
      ВДАТАХ  = GetFieldD(Robl,i,'ДатаХ');
      ВУ      = GetFieldN(Robl,i,'У');
      ВСТО1   = GetFieldN(Robl,i,'СТО1');
      ВСТО18  = GetFieldN(Robl,i,'СТО18');
      ВСТО2   = GetFieldN(Robl,i,'СТО2');
      ВСУМ1   = GetFieldN(Robl,i,'СУМ1');
      ВСУМ18  = GetFieldN(Robl,i,'СУМ18');
      ВСУМ2   = GetFieldN(Robl,i,'СУМ2');
      ВСУМ3   = GetFieldN(Robl,i,'СУМ3');
      ВСЧЕТ   = GetFieldS(Robl,i,'Счет');
      ВКОММЕНТ= GetFieldS(Robl,i,'Коммент');
      ВАНПОК  = GetFieldS(Robl,i,'АнПОК');

      ВСтр(ВДата,ВНомер,"","","",ВПокуп,ВАнПок,ВИНН,ВКПП,GetFieldR(Robl,i,'РЕКВП'),ВДатаХ,
           ВУ,ВСТО1,ВСТО18,ВСТО2,ВСУМ1,ВСУМ18,ВСУМ2,ВСУМ3,
           ВСчет,'Авансовый платеж',true,4);
    end;
    hint('Сохранение найденных с.ф.');
  Finally
    CloseWorkArea(Robl);
  End;
end;

Proc ПоискОтгрузок;
var Robl,Robl2,i:Integer;
var КолСтрВставить:Integer; -- Сколько строк вставлять
var СчетСФ:String; -- счет проставленный в счет-фактуре;
var БезПодразделений:Logical; -- Отбирать с.ф. только без подразделений
  БезПодразделений=БезПодразделений_;
  КолСтрВставить=Раб.Сис.КолСтрок;
  hint('Поиск отгрузок...');
  Robl=OpenWorkArea('Сторно_СФ','ДАТАВ','ДатаВ>='+DateToString(ДатаН)+' and ДатаВ<'+DateToString(ДатаКФильтр)
                                        +if(ФильтрАналитики<>""," and Pos('"+ФильтрАналитики+"',АНКОДПост)>0","")
                                        +if(НАШЕПОДРАЗД<>nil,' and НАШЕПОДРАЗД='+RecordToString(НашеПодразд),if(БезПодразделений,' and НАШЕПОДРАЗД=nil','')));
  Try
    for i=1..records(Robl) do
      if Not GetFieldL(Robl,i,'НеОтображать'): -- Нужно для вывода суммы отгрузки,если закрыли аванс полностью
       СчетСФ=GetFieldS(Robl,i,'СЧЕТ');
       if GetFieldL(Robl,i,'Перенос'): -- Переносим сумму из 20% в 18%
        ВСтр(GetFieldD(Robl,i,'ДАТАВ'),GetFieldS(Robl,i,'ОНОМЕР'),"","","",GetFieldS(Robl,i,'ПОСТ'),
             GetFieldS(Robl,i,'АНКОДПост'),GetFieldS(Robl,i,'ИНН'),GetFieldS(Robl,i,'КПП'),GetFieldR(Robl,i,'РЕКВП'),
             GetFieldD(Robl,i,'ОДАТАХ'),GetFieldN(Robl,i,'D8'),0,GetFieldN(Robl,i,'SUM18')+GetFieldN(Robl,i,'SUM1'),
             GetFieldN(Robl,i,'SUM2'),0,GetFieldN(Robl,i,'STO18')+GetFieldN(Robl,i,'STO1'),
             GetFieldN(Robl,i,'STO2'),GetFieldN(Robl,i,'SUM3'),if(СчетСФ='',СчетДляПроводок,СчетСФ),GetFieldS(Robl,i,'ОКОММЕНТ'),GetFieldL(Robl,i,'Аванс'),3);
       else
        ВСтр(GetFieldD(Robl,i,'ДАТАВ'),GetFieldS(Robl,i,'ОНОМЕР'),"","","",GetFieldS(Robl,i,'ПОСТ'),
             GetFieldS(Robl,i,'АНКОДПост'),GetFieldS(Robl,i,'ИНН'),GetFieldS(Robl,i,'КПП'),GetFieldR(Robl,i,'РЕКВП'),
             GetFieldD(Robl,i,'ОДАТАХ'),GetFieldN(Robl,i,'D8'),GetFieldN(Robl,i,'SUM1'),GetFieldN(Robl,i,'SUM18'),
             GetFieldN(Robl,i,'SUM2'),GetFieldN(Robl,i,'STO1'),GetFieldN(Robl,i,'STO18'),
             GetFieldN(Robl,i,'STO2'),GetFieldN(Robl,i,'SUM3'),if(СчетСФ='',СчетДляПроводок,СчетСФ),GetFieldS(Robl,i,'ОКОММЕНТ'),GetFieldL(Robl,i,'Аванс'),3);
       fi;
      fi;
    end;
    hint('Сохранение найденных с.ф.');
  Finally
    CloseWorkArea(Robl);
  End;
End;

Proc ФормированиеСтраниц; -- Формирует страницы книги
var Robl,Robl2,i,Koll:Integer;
var Сортировать:String;
  koll=1;
  уз=0;
  Сто1з=0;
  Сто18з=0;
  Сто2з=0;
  Ст18з=0;
  Ст2з=0;
  Сум1з=0;
  Сум18з=0;
  Сум2з=0;
  Сум3з=0;
  колстр=0;
  НомерСтр=NСтр;
  Сортировать="Дата;Номер";
  hint('Формирование страниц книги продаж');
  Robl=OpenWorkArea('КнигаПрод','nстр','');
  Try
    BeginChanging(Robl);
    Try
      for i=1 .. СтрУпр do
        ВставитьРамку(КнПро,КнПро+1);
        D0_[КнПро]=DateToString(D0К[i])+" N "+ДНП0К[i];
        КнПро[КнПро].Дата=D0К[i];
        КнПро[КнПро].ДНП0И=ДНП0ИК[i];
        КнПро[КнПро].ДНП0Кор=ДНП0КорК[i];
        КнПро[КнПро].ДНП0КИ=ДНП0КИК[i];
        КнПро[КнПро].АнПок=АнПокК[i];
        КнПро[КнПро].ДатаХ=D2К[i];
        КнПро[КнПро].Покуп=ПОКУПК[i];
        КнПро[КнПро].ИНН=ИННК[i];
        КнПро[КнПро].КПП=КППК[i];
        КнПро[КнПро].Номер=ДНП0К[i];
        КнПро[КнПро].у=D8К[i];
        КнПро[КнПро].Сто1=STO1К[i];
        КнПро[КнПро].Сто18=STO18К[i];
        КнПро[КнПро].Сто2=STO2К[i];
        КнПро[КнПро].Сум1=SUM1К[i];
        КнПро[КнПро].Сум18=SUM18К[i];
        КнПро[КнПро].Сум2=SUM2К[i];
        КнПро[КнПро].Сум3=SUM3К[i];
        КнПро[Кнпро].Коммент=КомментК[i];
        КнПро[Кнпро].Аванс=АвансК[i];
        КнПро[Кнпро].Счет=СчетК[i];
        КнПро[КнПро].ТипСтр=ТИПСТРК[i];
        уз=уз+D8К[i];
        Сто1з=Сто1з+STO1К[i];
        Сто18з=Сто18з+if(КнПро[КнПро].Аванс,0,STO18К[i]);
        Сто2з=Сто2з+if(КнПро[КнПро].Аванс,0,STO2К[i]);
        Ст18з=Ст18з+STO18К[i];
        Ст2з=Ст2з+STO2К[i];
        Сум1з=Сум1з+SUM1К[i];
        Сум18з=Сум18з+SUM18К[i];
        Сум2з=Сум2з+SUM2К[i];
        Сум3з=Сум3з+SUM3К[i];
      end;
      EndChanging(Robl);
    Except
      CancelChanging(Robl);
      raise;
    End;
  Finally
    CloseWorkArea(Robl);
  End;
End;

Proc УдалениеВспСтрок;
var Robl:Integer;
  ClearVariable(СтрУпр);
  ClearVariable(ВСПК);
  ClearVariable(КлючК);
  ClearVariable(D0К);
  ClearVariable(ДНП0К);
  ClearVariable(ДНП0ИК);
  ClearVariable(ДНП0КорК);
  ClearVariable(ДНП0КИК);
  ClearVariable(D2К);
  ClearVariable(D8К);
  ClearVariable(РЕКВПК);
  ClearVariable(ПОКУПК);
  ClearVariable(ИННК);
  ClearVariable(КППК);
  ClearVariable(ТИПСТРК);
  ClearVariable(STO1К);
  ClearVariable(STO18К);
  ClearVariable(STO2К);
  ClearVariable(SUM1К);
  ClearVariable(SUM18К);
  ClearVariable(SUM2К);
  ClearVariable(STO3К);
  ClearVariable(SUM3К);
  ClearVariable(КОММЕНТК);
  ClearVariable(СЧЕТК);
  ClearVariable(АНПОКК);
  ClearVariable(АВАНСК);
End;

proc РасчетСт(Об:String);
 if ДатаН<>1.1.100:
   if ДатаН<ДатаКФильтр:
     if not НеСторнировать_:
       Раб.Бух.Сторнировать('');
       Раб.Бух.СторнироватьСФПост('');
     end;
     ОчиститьПеременную(КнПро);
     СформироватьПоОтгрузкеВКартотеку; -- Формируем по отгрузке в вспомогательную картотеку
     СформироватьПоСторноСФПоставщика; -- Формируем по сторно с.ф. поставщика
     Поисквкниге;
     ФормированиеСтраниц; -- Формирует страницы книги
     УдалениеВспСтрок;
     NСТРаниц=Рендер;
     if КнПро=0:
       message('За этот период информация для книги продаж не найдена');
     else
       EditorApply;
       message('Книга продаж сформирована.');
       Оформление;
     fi;
   else message('Выберите правильный период формирования книги покупок');
   fi;
 else message('Перевыберите период по кнопке "Период".');
 fi;
end;

func ПриПроверке:Logical;
var i:Integer;
  if Проводить:
    for i=1..КНПро do
      if КНПро[i].Счет<>"":
        if Not ValidSign(КНПро[i].Счет):
          Message("Ошибка в написании счета дебета.");
          ШАБЛОН.поле="Счет";
          шаблон.строка=If(ДополнительныйЛист,15,12+If(Непервый,1,0))+i;
          ^false;
        fi;
      fi;
    end;
  end;
  ^true;
end;

proc ПоОплате_ПриИзменении(Флаг:String);
  if Оплата:
    флСортПоОплате.visible=true;
  else
    флСортПоОплате.visible=false;
  fi;
end;

proc ВыводКнЗнаполнение;
  if НеПервый or ДополнительныйЛист:
    кнЗаполнение.Enabled=false;
  else кнЗаполнение.Enabled=true;
  fi;
end;

proc ДопЛист_ПриИзменении(Флаг:String);
--  if ДополнительныйЛист:
--    if ДатаН<>1.1.100 and ДатаК<>1.1.100:
--        Дата=ДатаОформления;
--        NСтр=РасчетНомераДопЛиста;
--        if EnqOKCancel('Перенести итоговые суммы?')=cmOK:
--          ПереносИтогов;
--        fi;
--    else
--      message('Перевыберите период по кнопке "Период".');
--      ДополнительныйЛист=false;
--      флДопЛист.state=false;
--    fi;
--  else
--    NСтр=1;
--    Днп8Вх=0;Сто18Вх=0;Сум18Вх=0;Сто2Вх=0;Сум2Вх=0;Сум3Вх=0;Сто1Вх=0;Сум1Вх=0;
--    Дата=ДатаКФильтр-1;
--  fi;
  ВыводКнЗнаполнение;
  Оформление;
end;

proc Период_ПриНажатии(Кнопка:String);
  OpenBlank ("Раб.ПЕР");
  ДатаН=Раб.ПЕР.S; ДатаК=Раб.ПЕР.F;
  Пер="с "+РАБ.ФОРМАТ.ДАТАСТР(ДатаН,4)+" по "+РАБ.ФОРМАТ.ДАТАСТР(ДатаК,4);
  if ДополнительныйЛист:
    Дата=ДатаОформления;
  else
    Дата=ДатаКФильтр-1;
  end;
  ДопЛист_ПриИзменении('');
end;

proc ПриСчитывании;
  If Nстр = 0:
      ДатаОформления=today;
      Период_ПриНажатии("");
      Nстр=1;
      Рекв=РАБ.Обл.ПервЗапись("КонтрАгент","","Наше");
      while КнПро<10 do
           ВставитьРамку(КнПро,КнПро+1);
           КнПро[КнПро].ТипСтр=3;
      end;
   | True :
      If Рекв = Nil :
        Рекв=РАБ.Обл.ПервЗапись("КонтрАгент","","Наше");
      Fi;
   Fi;
   ПоОплате_ПриИзменении('');
   ВыводКнЗнаполнение;
   if not FlagInit: Оформление; fi;
end;

proc ВыборАналитики_ПриНажатии(Кнопка:String);
var tmp:String;
  tmp=AnaElection("*");
  if tmp<>'':
    ФильтрАналитики=tmp;
  fi;
end;

proc ПечатьСтолбцов;
--  Позиции.Column(20,ColPrinted,ПечататьСчета_);
--  Позиции.Column(21,ColPrinted,ПечататьСчета_);
--  Позиции.Column(22,ColPrinted,ПечататьСчета_);
--  Позиции.Column(23,ColPrinted,ПечататьСчета_);
--  Шапка.Column(16,ColPrinted,ПечататьСчета_);
--  Шапка.Column(17,ColPrinted,ПечататьСчета_);
--  Шапка.Column(18,ColPrinted,ПечататьСчета_);
--  Шапка.Column(19,ColPrinted,ПечататьСчета_);
end;

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

proc ПриОткрытии(Создать:Logical);
var i:I;
  FlagInit=True;
  ПечатьСтолбцов;
  Раб.Настр_Печать.Cfg("","Документы.счета.кнпро.cfg");
  for i=1..КНпро do
    D0_[i]=DateToString(КНПро[i].Дата)+" N "+КНПро[i].Номер;
  od;

end;

func кнСФ_ПриВходе(Поле:String;Итер:Integer):Logical;
var Robl:Integer;
  if КнПро[Итер].ТипСтр<>4 then -- Если не с.ф. поставщика
    if КнПро[Итер].Номер>" ":
     Robl=OpenWorkArea("Счетфакт","Дата","Дата="+Раб.Формат.ДатаСтр(КнПро[Итер].дата,4)+" and НомерБум='"+КнПро[Итер].Номер+"'");
     Try
       if records(Robl)>0:
        ОткрытьБланкРедактор("Документы.Счета.СФ",Robl,1);
        else сообщение("Не удается найти выбранную счет-фактуру. Возможно она была удалена");
       End;
     Finally
       CloseWorkArea(Robl);
     End;
    else сообщение("Строка пустая");
    fi;
    |КнПро[Итер].ТипСтр=4 then -- Если с.ф. поставщика
      if КнПро[Итер].Номер>" ":
       Robl=OpenWorkArea("СчетфактПост","Дата","Дата="+Раб.Формат.ДатаСтр(КнПро[Итер].дата,4)+" and НомерБум='"+КнПро[Итер].Номер+"'");
       Try
        if records(Robl)>0:
          ОткрытьБланкРедактор("Документы.Счета.СчетФактПост",Robl,1);
          else сообщение("Не удается найти выбранную счет-фактуру поставщика. Возможно она была удалена");
         End;
       Finally
         CloseWorkArea(Robl);
       end;
      else сообщение("Строка пустая");
      end;
  end;
  ^false;
end;



func КПППродавца_ПриВходе(Поле:String; Итер:Integer):Logical;
  НашеПодразд=OpenCardFile('Подразделения','',НашеПодразд);
  ^false;
end;


func ИмяПродавца_ПриВходе(Поле:String; Итер:Integer):Logical;
var tmp:Record;
  tmp=OpenCardFile('Контрагент','',Рекв);
  if tmp<>nil:
    Рекв=tmp;
  fi;
  ^false;
end;


proc ДатаОформления_ПриВыходе(Поле:String;Итер:Integer);
  Дата=ДатаОформления;
end;


func АнПок_ПриВходе(Клетка:String; Итер: Integer): Logical;
var tmp:String;

  tmp = AnaElection("*");
  if tmp<>"":
    КНПро[Итер].АнПок = КНПро[Итер].АнПок + if(length(КНПро[Итер].АнПок)>0," ","")  + tmp;
  end;

  ^false;
end;

func Аванс_ПриВходе(Поле: String; Итер: Integer): Logical;
   КНПро[Итер].Аванс = Not КНПро[Итер].Аванс;
   Return(False);
end;

--БланкСШаблоном 2"Сервис книги продаж"0;
proc ОбработатьАвансы_ПриНажатии(Кнопка:String);
  Раб.Бух.Сторнировать('');
  Раб.Бух.СторнироватьСФПОСТ('');
end;

Proc btnPrint_OnClick(Sender: String);
-- var t:I;
-- t=time;
 Рендер;
-- t=time-t;
-- Trace(str(t));
 if Sender="btnPrint":
    Раб.Настр_Печать.Prn("Раб.Вспом.Печать2","",Раб.Вспом.Печать2.SelfCfg,"",1);
    Close("Раб.Вспом.Печать2");
   |Sender="btnPreview":
    OpenBlank("Раб.Вспом.Печать2");
 fi;
end;


Proc AfterOpen(Destroy: Logical);
 Инициализация;
 Оформление;
 FlagInit=False;

end;


Func Add_OnEnter(FieldName: String; Iter: Integer): logical;
  if Проводить:  Return  False; fi;
  InsertFrame(КНПро,Iter+1);
  Return  False;
end;


Func Del_OnEnter(FieldName: String; Iter: Integer): logical;
  if Проводить:  Return  False; fi;
  DeleteFrame(КнПро,Iter);
  Return False ;
end;


Proc CheckBox2_OnChange(Sender: String);
  EditorApply;
  Оформление;
end;

Proc D0_OnExit(FieldName: String; Iter: Integer);
var tmp:S;
var tmpD:D;
var N:I;
  N=Pos("N",D0_[Iter]);
  if N>0:
     tmp=Substr(D0_[Iter],1,N-1);
     tmp=Trim(tmp);
    else
     tmp="";
  fi;

  try
    tmpD=StringToDate(tmp);
  except
    tmpD=1.1.100;
    tmp="";
  end;

  if tmp="":
     КнПРо[Iter].Номер=D0_[Iter];
    else
     КнПРо[Iter].Дата=tmpD;
     КнПРо[Iter].Номер=Substr(D0_[Iter],N+1,255);
  fi;

end;


КОНЕЦ