-- Шаблон создан мастером бланков
-- 09.07.2012 16:35:49
--
БланкСШаблоном "Остатки денежных документов";
btnРасчет:Object;

var ппш[]:I;
Шапка:Section;
Таблица:Section;
Подвал:Section;
var стСкрыть:S;
кнСохрВПриход: Object;

var fБыстрРасч:L;
var fДок:L;


var OWAПрих:I;
var OAПрих:I;

var OWAРасх:I;
var OAРасх:I;

var OWAАванс:I;
var OAАванс:I;

var BufSub[]:S;
var tДенДок:S;
var tДт:D;
var tСум:N;
var tКол:N;
var tСерия:S;
var tНомН:N;
var tНомК:N;
var tРазм:I;

var Упр:I;
--var Ключ[]:S;

var ДенДок[]:S;
var Серия[]:S;
var Разм[]:I;
var Номер[]:S;

var НомерН[]:N;
var НомерК[]:N;
var Разм[]:I;
var КолНат[]:N;

var Кол[]:N;
var Цена[]:N;

var Сум[]:N=Кол[$]*Цена[$];
var НаимДок[]:S=Name_A(ДенДок[$]);
var Код[]:S=ExtractWords(2,255,ДенДок[$],".");
var ЕдИзм[]:S;
var Buf[]:S;

var пп[]:I=$;

var mode:S=["report"];
var УслСчет:S=[""];
var УслАна:S=[""];
var ДатаР:D=[Today];

var Choose:S="Выбрать";
Chosen:I;
var SelfBln:S='РАБ.ВСПОМ.ДЕНДОК_ОСТ';
var masChose[]:L;

SHeader:Section;
var Header:String=["Остатки денежных документов"];

Proc Очистить;
 --
-- ClearVariable(Ключ);
 ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр);
 ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.ДенДок);
 ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.Серия);
 ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.Разм);
 ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.Номер);
  ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.НомерН);
  ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.НомерК);
 ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.Кол);
 ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.Цена);
 ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.ЕдИзм);
 ClearVariable(РАБ.ВСПОМ.ДЕНДОК_ОСТ.КолНат);
 --
end;



Func NumToStr(Value:N; Len:I):S;
var Ret:S;
 if Len=0: ^""; fi;
 Ret=Str(Value);
 Ret=RepStr("0",Len-Length(Ret))+Ret;
 ^Ret;
end;

Proc RefreshNums (Iter:I);
   Кол[Iter]=НомерК[Iter]-НомерН[Iter]+1;
   if Кол[Iter]=1:
       Номер[Iter]=NumToStr(НомерН[Iter],Разм[Iter]);
     else
      Номер[Iter]=NumToStr(НомерН[Iter],Разм[Iter])+"-"+NumToStr(НомерК[Iter],Разм[Iter]);
   fi;
end;
--/****if* Раб.Вспом.Дендок123/ВзятьИзКарт
--* SYNOPSIS
Proc ВзятьИзКарт(OWA:I; UKey:S; OA:I; t:i);
--* FUNCTION
--* Получает данные денежных документов (номер, серия, количество) из картотеки
--* и сохраняет их во временные переменные бланка
--* При этом производится дополнительная фильтрация по параметрам, переданным во временных переменных
--* и атрибутам проводки (переданной по номеру) для получения данных из конкретной строки подтаблицы
--* INPUTS
--* OWA - рабочая область открытая над картотекой, из которой мы хотим получить данные
--* Ukey - ключ записи в которой содержатся данные
--* OA - рабочая область, открытая на подтаблицей с данными
--* t - номер проводки
--* SOURCE
var z,n,nn:I;
var FF,НомН_,НомК_,Призн_,ПризнДеб_,ПризнКре_,tmp:S;
var Rec: Record;
 tСерия="";
 tНомН=0;
 tНомК=0;
 tРазм=0;
 z=GetRecordNumber(OWA,StringToRecord(UKey));
 if not z=0:
     if t<>0:
        FF="ДЕНДОКВИД_ПРИЗН='"+tДенДок+"'";
        FF=FF+" and Round(КОЛ,"+Str(TransAccuracy(t))+")="+Str(tКол,TransAccuracy(t));
        if WorkAreaCardFile(OWA)="РПО_АВАНС_ОТЧЕТ":
           FF=FF+" and Round(УЧТ_РУБ,"+Str(Accuracy)+")="+Str(tСум,Accuracy);
          else
           FF=FF+" and Round(СУММА,"+Str(Accuracy)+")="+Str(tСум,Accuracy);
        fi;
      else
        if tДенДок="":
           FF="";
          else
           FF="ДЕНДОКВИД_ПРИЗН='"+tДенДок+"'";
        fi;

     fi;
     SetFilter(OA,FF);
     nn=Records(OA);
     if not nn=0:
        if t<>0:
           tmp=TransSigns(t);
           if not Pos("+",tmp)=0:
              ПризнДеб_=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(tmp," ","+*","");
              ПризнДеб_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(SubStr(ПризнДеб_,2,255),"+"," ");
             else
              ПризнДеб_="";
           fi;
           if not Pos("-",tmp)=0:
              ПризнКре_=Раб.Бюджет2005.ВзятьСловаИзНабораПоМаске(tmp," ","-*","");
              ПризнКре_=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(SubStr(ПризнКре_,2,255),"-"," ");
             else
              ПризнКре_="";
           fi;
           if WorkAreaCardFile(OWA)="РПО_АВАНС_ОТЧЕТ":
              Призн_=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(tmp," ",Trim(GetFieldS(OWA,z,"ПРИЗНМОЛ")+" "+tДенДок+" "+GetFieldS(OWA,z,"ПризнПодр")+" +* -*")," ");
             else
              Призн_=Раб.Бюджет2005.УдалитьСловоИзНабораПоМаске(tmp," ",Trim(GetFieldS(OWA,z,"ОбщПризн")+" "+tДенДок+" "+GetFieldS(OWA,z,"ПризнПодр")+" +* -*")," ");
           fi;
        fi;
        for n=1..nn do
         Rec=GetRecordKey(OA,n);
         if SearchInArray(BufSub,Str(OWA)+" "+UKey+" "+RecordToString(Rec),True)=-1: --проверяем былали обработана запись подтаблицы ранее при совпадении критерия поиска
            if t=0 or (Раб.Бюджет2005.ПроверитьНаборСлов(GetFieldS(OA,n,"ПРИЗН")," ",Призн_," ","") and
               Раб.Бюджет2005.ПроверитьНаборСлов(GetFieldS(OA,n,"ПРИЗНДЕБ")," ",ПризнДеб_," ","") and
               Раб.Бюджет2005.ПроверитьНаборСлов(GetFieldS(OA,n,"ПРИЗНКРЕ")," ",ПризнКре_," ","")):
               InsertInArraySort(BufSub,Str(OWA)+" "+UKey+" "+RecordToString(Rec));
               tСерия=GetFieldS(OA,n,"СерияБум");
               НомН_=GetFieldS(OA,n,"НомерБум_Н");
               НомК_=GetFieldS(OA,n,"НомерБум_К");
               tРазм=Max(Length(НомН_),Length(НомК_));
               tНомН=Round(НомН_);
               tНомК=Round(НомК_);
               if t=0:
                  tКол=GetFieldN(OA,n,"КОЛ");
                  tДенДок=GetFieldS(OA,n,"ДЕНДОКВИД_ПРИЗН");
                  tСум=GetFieldN(OA,n,"СУММА");
               fi;
               Break;
            fi;
         fi;
        od;
     fi; --if Records(OA)>0:
 fi; --not z=0:
end;
--***********************

--/****if* Раб.Вспом.Дендок_ост/РасчетПров
--* SYNOPSIS
Proc РасчетПров(vУслСч:S; vУслАн:S;ДК:D; vТип:I; k:I);
--* FUNCTION
--* Выбирает данные денежных документов из проводок
--* INPUTS
--* vУслСч - условие на счета
--* vУслАн - условие на аналитику
--* ДК - дата до которой вести расчет
--* vТип - что выбираем - посутпление (1) или выбытите (-1)
--* k - коэффициент пересчета для индикации прогресса
--* SOURCE
var t,z,p:i;
var UKey,Crd,Key:S;
var OA:I;
var ДН_:D;
var Цена,Номинал,n:N;
var Rec: Record;
 ClearVariable(РАб.Вспом.Дендок_ост.BufSub);
 ДН_=1.1.100;
 ShowProgress((ДК-ДН_)*3,"Расчет...");
 for Transaction t=vУслСч+"{"+vУслАн+"}",ДН_,ДК do
  Crd=TransCardFile(t);
  UKey=RecordToString(TransRecord(t));
  tДенДок=Раб.Бюджет2005.ВзятьСловоИзНабораПоМаске(TransSigns(t)," ","ДенДок.*","");
  tДт=TransDate(t);
  tСум=TransSum(t);
  tКол=TransSum(t,"Кол");
  p=(ДК-ДН_)*k+(tДт-ДН_);
  ProgressPos(p);
  if Crd="РПО_ДенДок_Приход":
     OA=OpenArray(OWAПрих,1,"Приход","","1=0");
     try
       ВзятьИзКарт(OWAПрих,UKey,OA,t);
     finally
       CloseWorkArea(OA);
     end;
    |Crd="РПО_ДенДок_Расход":
     OA=OpenArray(OWAРасх,1,"Расход","","1=0");
     try
       ВзятьИзКарт(OWAРасх,UKey,OA,t);
     finally
       CloseWorkArea(OA);
     end;
    |Crd="РПО_АВАНС_ОТЧЕТ":
     OA=OpenArray(OWAАванс,1,"Позиции","","1=0");
     try
       ВзятьИзКарт(OWAАванс,UKey,OA,t);
     finally
       CloseWorkArea(OA);
     end;
    |True: tСерия=""; tНомН=0; tНомК=0; tРазм=1;
  fi;
  --Остатки
    z = РАБ.ДИАПАЗОНЫ.КолД;
    РАБ.ДИАПАЗОНЫ.буфСер1 = tСерия;
    РАБ.ДИАПАЗОНЫ.буфНач1 = tНомН;
    РАБ.ДИАПАЗОНЫ.буфКон1 = tНомК;
    РАБ.ДИАПАЗОНЫ.буфКол1 = int((tКол)/((tНомК-tНомН+1))*vТип);
    РАБ.ДИАПАЗОНЫ.буфРазм1 = int(tРазм);
    РАБ.ДИАПАЗОНЫ.буфПризн1 = tДенДок;
    РАБ.ДИАПАЗОНЫ.буфЦена1 = Round(tСум/tКол,Accuracy);
    РАБ.ДИАПАЗОНЫ.Сохранить(z + 1, 1);
 od; --for Transaction t=vУслСч+"{"+vУслАн+"}",ДН_,ДК_ do
end;
--**************

Proc РасчетОст (УслСч:S; УслАн:S;ДК:D);
 Refresh;
 OWAПрих=OpenWorkArea("РПО_ДенДок_Приход","");
 Try
  OWAРасх=OpenWorkArea("РПО_ДенДок_Расход","");
  Try
   OWAАванс=OpenWorkArea("РПО_Аванс_Отчет","");
   Try
    РАБ.ДИАПАЗОНЫ.Очистка;
    РасчетПров("+"+УслСч,УслАн,ДК, 1,0);
    РасчетПров("-"+УслСч,УслАн,ДК,-1,1);
   Finally
    CloseWorkArea(OWAАванс);
   end;
  Finally
   CloseWorkArea(OWAРасх);
  end;
 Finally
  CloseWorkArea(OWAПрих);
  CloseProgress;
 end;
end;

Proc КПоказу(k:I;hidCol:S;byone:L);
var n,nn,p1,z:I;
var Кол_:N;
var КартПр :S;
var ЗапПр :Record;
 Очистить;
 РАБ.ДИАПАЗОНЫ.Обработка;
 nn=РАБ.ДИАПАЗОНЫ.КолД;
 ShowProgress((k+1)*nn,"Расчет...");
 for n=1..nn do
  ProgressPos(nn*k+n);
      РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр=РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр+1;
      РАБ.ДИАПАЗОНЫ.Извлечь(n, 1);
      ДенДок[РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр]=РАБ.ДИАПАЗОНЫ.буфПризн1;
--      НаимДок[Упр]=Name_A(РАБ.ДИАПАЗОНЫ.буфПризн1);
      КартПр=SignCardFile(РАБ.ДИАПАЗОНЫ.буфПризн1, false);
      ЗапПр=SignToRecord(РАБ.ДИАПАЗОНЫ.буфПризн1,False);
--      if ExistsCardFile(КартПр):Код[Упр]=GetCardFieldS(КартПр,ЗапПр,"ПРИЗНАК"); else Код[Упр]=''; fi;
      if ExistsCardFile(КартПр):ЕдИзм[РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр]=GetCardFieldS(КартПр,ЗапПр,"ЕдИзм"); else ЕдИзм[РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр]=''; fi;
      Серия[РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр]=РАБ.ДИАПАЗОНЫ.буфСер1;
      НомерН[РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр]=РАБ.ДИАПАЗОНЫ.буфНач1;
      НомерК[РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр]=РАБ.ДИАПАЗОНЫ.буфКон1;
      Разм[РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр]=РАБ.ДИАПАЗОНЫ.буфРазм1;
      КолНат[РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр]=РАБ.ДИАПАЗОНЫ.буфКол1;
      Цена[РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр]=РАБ.ДИАПАЗОНЫ.буфЦена1*РАБ.ДИАПАЗОНЫ.буфКол1;
      RefreshNums(РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр);
 od;
 CloseProgress;
 стСкрыть=hidCol;
end;

Proc Выбрать;
--Func Выбрать(УслСч:S; УслАн:S;ДК:D):I;
var n,n0,nn,z:I;
var trigger:L;
--Возвращает число строк
  --КПоказу(3);
  for n=1..Упр do
   masChose[n]=false;
  od;
  mode="select";
  Chosen=0;
  OpenBlank(SelfBln,True);
  if Chosen=-1:
     n0=1;
     nn=РАБ.ВСПОМ.ДЕНДОК_ОСТ.Упр;
    |Chosen>0:
     n0=Chosen;
     nn=Chosen;
    else
     n0=0;
     nn=0;
  fi;
  mode="report";
  РАБ.ДИАПАЗОНЫ.Очистка;
  for n=n0..nn do
     if Раб.Вспом.Дендок_ост.masChose[n]:
        z = РАБ.ДИАПАЗОНЫ.КолД;
        РАБ.ДИАПАЗОНЫ.буфСер1 = Серия[n];
        РАБ.ДИАПАЗОНЫ.буфНач1 = НомерН[n];
        РАБ.ДИАПАЗОНЫ.буфКон1 = НомерК[n];
        РАБ.ДИАПАЗОНЫ.буфПризн1 = ДенДок[n];
        РАБ.ДИАПАЗОНЫ.буфРазм1 = Разм[n];
        РАБ.ДИАПАЗОНЫ.буфЦена1 = Цена[n];
        РАБ.ДИАПАЗОНЫ.буфКол1 = 1;
        РАБ.ДИАПАЗОНЫ.Сохранить(z + 1, 1);
     fi;
  od;
  РАБ.ДИАПАЗОНЫ.Обработка;
end;



Func Choose_OnEnter(FieldName: String; Iter: Integer): logical;
  Chosen=Iter;
  Close;
  Return  False;
end;


Proc OnClick(Row: Integer; Col: Integer; Double: Logical);
var n,iter:I;
 ClearVariable(Buf);
 Buf[1]="Выбрать весь список";
 Buf[2]="Снять выбор со всего списка";
 n=Alternate("Выбор режима",Buf,-1,1,14);
 if n=0: Exit; fi;
-- УдалитьПустыеСтроки;
 for Iter=1..Упр do
  masChose[Iter]=(n=1);
 od;

end;

Proc Split_OnClick(Row: Integer; Col: Integer; Double: Logical);
var n,iter:I;
var tmp:S;
  Iter=AsInteger(template.Frame);
  n=Input(tmp,"Введите последний номер интервала");
  if n=cmOk:
     n=Int(tmp);
     if n=0:
        Message("Неправильный номер",mtError);
       |n<НомерН[Iter] or n>=НомерК[Iter]:
        Message("Номер не принадлежит разбиваемому интервалу",mtError);
       else
        InsertFrame(Упр,Iter+1);
        ДенДок[Iter+1]=ДенДок[Iter];
        Серия[Iter+1]=Серия[Iter];
        Разм[Iter+1]= Разм[Iter];
        Цена[Iter+1]= Цена[Iter];
        ЕдИзм[Iter+1]=ЕдИзм[Iter];
        НомерН[Iter+1]=n+1;
        НомерК[Iter+1]=НомерК[Iter];
        НомерК[Iter]=n;
        RefreshNums(Iter);
        RefreshNums(Iter+1);
    fi;
  fi;
end;


Func masChose_OnEnter(FieldName: String; Iter: Integer): logical;
 masChose[Iter]=not masChose[Iter];
 Return False;
end;


Proc Выбрать_OnClick(Row: Integer; Col: Integer; Double: Logical);
  Chosen=-1;--Особая константа для массового выбора
  Close;
end;


Proc btnTop_OnClick(Sender: String);
var Iter:I;
  Chosen=-1;--Особая константа для массового выбора
  if Sender='btnCancel':
     Chosen=0;
    |Sender='btnAll':
     for Iter=1..Упр do
      masChose[Iter]=True;
     od;
  fi;
  Close;
end;

Proc AfterOpen(Destroy: Logical);
var n,i:I;
  btnРасчет.Visible=mode="report";
  Шапка.Row(2,RowVisible,mode="report");
  Шапка.Row(3,RowVisible,mode="report");
  Шапка.Row(4,RowVisible,mode="report");

  --Подвал.Row(2,RowVisible,mode="select");

  if mode="report":
    if УслСчет<>"":
       РасчетОст(Услсчет,УслАна,ДатаР);
    fi;
    КПоказу(1,"",False);
  fi;
  if Pos("#1#",стСкрыть)=0:
     Шапка.Column(3,ColVisible,True);
     Таблица.Column(3,ColVisible,True);
     Подвал.Column(3,ColVisible,True);
     ппш[1]=1;
     i=2;
    else
     i=1;
     Шапка.Column(3,ColVisible,False);
     Таблица.Column(3,ColVisible,False);
     Подвал.Column(3,ColVisible,False);
  fi;

  Шапка.Column(4,ColVisible,Pos("#ch#",стСкрыть)=0 and mode="select");
  Таблица.Column(4,ColVisible,Pos("#ch#",стСкрыть)=0 and mode="select");
  Подвал.Column(4,ColVisible,Pos("#ch#",стСкрыть)=0 and mode="select");

  for n=2..9 do
      if Pos("#"+str(n)+"#",стСкрыть)=0:
         Шапка.Column(n+3,ColVisible,true);
         Таблица.Column(n+3,ColVisible,true);
         Подвал.Column(n+3,ColVisible,True);
         ппш[n]=i;
         i=i+1;
        else
         Шапка.Column(n+3,ColVisible,False);
         Таблица.Column(n+3,ColVisible,False);
         Подвал.Column(n+3,ColVisible,false);
      fi;
  od;
  Шапка.Column(13,ColVisible,mode="select");
  Таблица.Column(13,ColVisible,mode="select");
  Подвал.Column(13,ColVisible,mode="select");

  кнСохрВПриход.Visible = not ModalMode;
end;

Proc btnРасчет_OnClick(Sender: String);
    if УслСчет="":
       Message("Задайте условие на счета",mtError);
    fi;
    if ДатаР=1.1.100:
       Message("Задайте дату расчета",mtError);
    fi;
    if УслАна="":
        РасчетОст(Услсчет,"ДЕНДОК.*",ДатаР);
       else
        РасчетОст(Услсчет,"("+УслАна+")&ДЕНДОК.*",ДатаР);
    fi;
    КПоказу(1,"",False);

end;


Func УслСчет_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
  tmp=Раб.КБК.Список("*","","СЧ6 ВД+? ИГ");
  if Substr(tmp,Length(tmp),1)=".":
     tmp=tmp+ "*";
    else
     tmp=tmp+ ".*";

  fi;
  tmp="*."+tmp;
  Return  tmp;
end;


Func УслАна_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:S;
 tmp=Раб.Бюджет2005.СписокСправ(if(УслСчет="","*",УслСчет),0,"");
 Cur=AnaElection(tmp,false,true);
 if Cur="": Template.HideEditor(False); ^Cur; fi;
 if SubStr(cur,length(cur),1)=".": cur=SubStr(cur,1,length(cur)-1)+"!"; fi;
 Cur=Раб.Бюджет2005.Объединить_Диалог(УслАна,Cur,"&=И;|=ИЛИ;&~=И ИСКЛЮЧИТЬ;_=ЗАМЕНИТЬ","_");
 Return Cur;
end;


Proc кнСохрВПриход_OnClick(Sender: String);
  var WA, A, p, pa, i: Integer;
  var прДок: String;
  WA = OpenWorkArea('РПО_ДЕНДОК_ПРИХОД', '', '1=0');
  try
    BeginChanging(WA, false);
    try
      p = InsertRecord(WA);
      p = PutFieldD(WA, p, 'ДАТА', Dat(31, 12, Year(ДатаР) - 1));
      p = PutFieldI(WA, p, 'НОМЕР', -1); -- чтобы не слетала дата
      p = PutFieldS(WA, p, 'СЧКРЕ', '00');
      A = OpenArray(WA, p, 'ПРИХОД', '');
      try
        for i = 1 .. Упр do
          pa = InsertRecord(A);
          прДок = 'ДЕНДОК.' + Код[i];
          pa = PutFieldR(A, pa, 'ДЕНДОК_ВИД', SignToRecord(прДок, false));
          pa = PutFieldS(A, pa, 'ДЕНДОКВИД_ПРИЗН', прДок);
          pa = PutFieldS(A, pa, 'ДЕНДОКВИД_НАИМ', НаимДок[i]);
          pa = PutFieldL(A, pa, 'FLAGКОЛ', НомерН[i] = 0);
          pa = PutFieldS(A, pa, 'СЕРИЯБУМ', Серия[i]);
          pa = PutFieldS(A, pa, 'НОМЕРБУМ_Н', ExtractWord(1, Номер[i], '-'));
          pa = PutFieldS(A, pa, 'НОМЕРБУМ_К', ExtractWord(2, Номер[i], '-'));
          pa = PutFieldI(A, pa, 'КОЛДОК', Int(Кол[i]));
          pa = PutFieldN(A, pa, 'КОЛ', Кол[i] * КолНат[i]);
          pa = PutFieldN(A, pa, 'ЦЕНА', Цена[i]);
          pa = PutFieldN(A, pa, 'СУММА', Сум[i]);
        od;
      finally
        CloseWorkArea(A);
      end;
      SetFilter(WA, 'UKEY=' + RecordToString(GetRecordKey(WA, p)));
      if Records(WA) > 0:
        OpenBlankEditor('РАБ.ВСПОМ.ДЕНДОК_ОСТ', WA, 1);
        if GetFieldI(WA, 1, 'НОМЕР') = -1:
          CancelChanging(WA);
        else
          EndChanging(WA);
        fi;
      fi;
    except
      CancelChanging(WA);
    end;
  finally
    CloseWorkArea(WA);
  end;
end;


Конец
