БЛАНКСШАБЛОНОМ[07.11.2005] "Опись инвентарных карточек по учету ОС";
-- Редакция ЗАО "Агентство 'Русспромоценка'"
--2 Переменные
СекцШапка:Object; СекцТАБ:Object;
btnРасчет:Object; btnClose:Object; btnПечать:Object; btnОбновить:Object;
cbUse_МОЛ_МХЭ:Object; cbнетПО:Object;
--
флмосн:l;
var нетПО       :Logical=[False];
var Use_МОЛ_МХЭ :Logical=[False];
var НеНапомин2  :Logical=[False];
var CRDwork     :String="РПО_ИНВКАРТ_ОС";
var BLNwork     :String="НФА.ДОКУМЕНТЫ.КАРТОЧКИ.ОКУД_0504031";
ДатаНП       :Date;
ДатаКП       :Date;
var DD1      :Date=ДатаНП;
var DD2      :Date=ДатаКП;
ДатаИС       :Date;
var OldDate  :Date;
var StoreANA :String;
var Пользов  :String;
var I1       :String="все";
var I2       :String="все";
var I3       :String="все";
var A        :String="+";
var D        :String="-";
Упр_ДопУсл:i;
ДОПСПР[]:S;ДОППРИЗН[]:S;ДОППРИЗНН[]:S=Name_A(ДОППРИЗН[$]);
--
УЧРЕЖ_КОД    :String;
УЧРЕЖ_ИМЯ    :String;
ОКПО         :String;
КОД_ПО       :String=["П.*"];
var ИМЯ_ПО   :String=if(Name_A(КОД_ПО) <>"" and Name_A(КОД_ПО) <>" ", Name_A(КОД_ПО) , if(КОД_ПО="П.*", "Все подразделения", КОД_ПО));
КОД_МХЭ      :String=["М.*"];
var ИМЯ_МХЭ  :String=if(Name_A(КОД_МХЭ)<>"" and Name_A(КОД_МХЭ)<>" ", Name_A(КОД_МХЭ), if(КОД_МХЭ="М.*", "Все местонахождения", КОД_МХЭ));
КОД_МОЛ      :String=["МОЛ.*"];
var ИМЯ_МОЛ  :String=if(Name_A(КОД_МОЛ)<>"" and Name_A(КОД_МОЛ)<>" ", Name_A(КОД_МОЛ), if(КОД_МОЛ="МОЛ.*", "Все материально ответственные лица", КОД_МОЛ));
ИсполДОЛ     :String;
ИсполФИО     :String;
--
Позиции      :Integer;
--
КАРНОМ[]     :String;
ИНВНОМ[]     :String;
ИМЯНФА[]     :String;
ВЫБДАТ[]     :Date;
ВЫБ_ЖО[]     :String;
UPD_DD[]     :Date;
--
var УслИМЯ[] :String;
var УслДЕБ[] :String;
var УслКРЕ[] :String;
var УслАНА[] :String;
--
var СЧ_ОС[]  :String;
var СЧ_АМ[]  :String;
--
var Buf_N[]  :Numeric;
var Buf_D[]  :Date;
var BufDD[]  :Date;
--
var ПaДАТА[]         :Date;
var ПaЖО[]           :String;
var ПaСУММА[]        :Numeric;
var РaДАТА[]         :Date;
var РaЖО[]           :String;
var РaСУММА[]        :Numeric;
var ВaДАТА[]         :Date;
var ВaНОМЕР[]        :String;
var ВaЖО[]           :String;
var ВaМХЭ[]          :String;
var ВaМОЛ[]          :String;
var АaДАТ_АКТА[]     :Date;
var АaНОМ_АКТА[]     :String;
var АaБАЛ_СТОИМ[]    :Numeric;
var АaСУММА_МЕС[]    :Numeric;
var АaАМОРТ_НАКОП[]  :Numeric;
var АaDATE_ACCOUNT[] :Date;
var АaТИП[]          :Integer;
var ttМХЭ            :String;
var ttМОЛ            :String;

2-- Общие процедуры и функции
Proc ОчиститьТаблицу;
 ClearVariable(КАРНОМ); ClearVariable(ИНВНОМ); ClearVariable(ИМЯНФА);
 ClearVariable(ВЫБДАТ); ClearVariable(ВЫБ_ЖО); ClearVariable(UPD_DD);
 ClearVariable(Позиции);
end;

Proc ОчиститьДляОбновления;
 ClearVariable(ПaДАТА          );
 ClearVariable(ПaЖО            );
 ClearVariable(ПaСУММА         );
 ClearVariable(РaДАТА          );
 ClearVariable(РaЖО            );
 ClearVariable(РaСУММА         );
 ClearVariable(ВaДАТА          );
 ClearVariable(ВaНОМЕР         );
 ClearVariable(ВaЖО            );
 ClearVariable(ВaМХЭ           );
 ClearVariable(ВaМОЛ           );
 ClearVariable(АaДАТ_АКТА      );
 ClearVariable(АaНОМ_АКТА      );
 ClearVariable(АaБАЛ_СТОИМ     );
 ClearVariable(АaСУММА_МЕС     );
 ClearVariable(АaАМОРТ_НАКОП   );
 ClearVariable(АaDATE_ACCOUNT  );
 ClearVariable(АaТИП           );
end;
Proc ДобавитьСтроку(ИмяСекц:String; Iter:Integer);
 beep;
 if ИмяСекц="Секц_ДопУсл": 
  Try 
    InsertFrame(УПР_ДопУсл, Iter+1);
  Except
  end;
 fi;
end;

Proc УдалитьСтроку(ИмяСекц:String; Iter:Integer);
 if ИмяСекц="Секц_ДопУсл":
   if Упр_ДопУсл>1:
     Try DeleteFrame(Упр_ДопУсл,    Iter); Except end;
   else
     Try DeleteFrame(Упр_ДопУсл,    Iter); Except end; Try InsertFrame(Упр_ДопУсл,    Iter); Except end;
   fi;
 fi;
end;

Proc Очистить;
 ОчиститьДляОбновления;
 ClearVariable(УслИМЯ); ClearVariable(УслДЕБ); ClearVariable(УслКРЕ); ClearVariable(УслАНА);
 ClearVariable(СЧ_ОС); ClearVariable(СЧ_АМ);
 ClearVariable(Buf_N); ClearVariable(Buf_D); ClearVariable(BufDD);
end;

Func Объединить(Value1:String; Value2:String; Separator:String) :String;
var Ret :String;
 if Value1<>"" and Value2<>"": Ret=Value1+Separator+Value2;
 |  Value1= "" and Value2<>"": Ret=Value2;
 |  Value1<>"" and Value2="" : Ret=Value1;
 |  True: Ret="";
 fi;
 ^Ret;
end;

Func ВыборДаты(srcDate:Date) :Date;
var dd :Date;
 if srcDate>1.1.100: dd=Calendar(srcDate); else dd=Calendar(ToDay); fi;
 if not(dd<=1.1.100): ^dd; else ^srcDate; fi;
end;

Func GetDate :Date;  -- считываем в заданном поле дату
var name :String;
 name=AsString(Template.Field);
 if name="ДатаНП" : ^ДатаНП;
 |  name="ДатаКП" : ^ДатаКП;
 |  name="ДатаИС" : ^ДатаИС;
 fi;
end;

Proc SetDate(Value:Date); -- устанавливаем в заданном поле дату; Value - значение даты, которое необходимо присвоить
var name :String;
 name=AsString(Template.Field);
 if name="ДатаНП" : ДатаНП = Value;
 |  name="ДатаКП" : ДатаКП = Value;
 |  name="ДатаИС" : ДатаИС = Value;
 fi;
end;

Func ПроверкаДат :Logical;
 if ДатаНП <1.1.100: Message("Не задана дата начала периода!",    mtWarning); Template.Field="ДатаНП"; ^False; fi;
 if ДатаКП<=1.1.100: Message("Не задана дата окончания периода!", mtWarning); Template.Field="ДатаКП"; ^False; fi;
 if ДатаНП>ДатаКП:
   Message("Дата начала '"+DateToString(ДатаНП)+"' периода позже даты окончания периода '"+DateToString(ДатаКП)+"'!"+Chr(13)+
           "Необходимо скорректировать даты!", mtError);
   Template.Field="ДатаНП";
   ^False;
 fi;
 if Year(ДатаКП)>=2006 and not(ДатаНП=1.1.100 or Year(ДатаНП)>=2006):
   Message("Дата конца '"+DateToString(ДатаКП)+"' периода позже даты вступления в силу приказа 25н,"+Chr(13)+
           "а дата начала '"+DateToString(ДатаНП)+"' периода раньше даты вступления в силу приказа 25н!"+Chr(13)+
           "Необходимо скорректировать даты!", mtError);
   Template.Field="ДатаКП";
   ^False;
 fi;
 ^True;
end;

Func ОтменитьИзмененияУсловийОтчета :Logical;
var FF :Logical;
var qq :Integer;
 FF=False;
 if Позиции>0:
   qq=EnqOkCancel("Условия отбора данных для формирования описи"+Chr(13)+
                  "инвентарных карточек по учету основных средств изменились!"+Chr(13)+
                  "Очистить отчет?", mtConfirmation);
   if qq=cmOk    : Очистить; ОчиститьТаблицу;
   |  qq=cmCancel: FF=True;
   fi;
 fi;
 ^FF;
end;

Proc Реквизиты;
var REC :Record;
var RO :Integer;
 REC=SignToRecord("К."+УЧРЕЖ_КОД);
 REC=OpenCardFile("КОНТРАГЕНТ", "НАШЕ", REC, crdRecordOnly);
 if REC=NIL: Exit; fi;
 RO=OpenWorkArea("КОНТРАГЕНТ", "", "Ukey="+RecordToString(REC));
 Try
   if Records(RO)=1:
     УЧРЕЖ_КОД = GetFieldS(RO, 1, "ПРИЗНАК");
     УЧРЕЖ_ИМЯ = GetFieldS(RO, 1, "КОРИМЯ");
     ОКПО      = GetFieldS(RO, 1, "ОКПО");
   fi;
 Finally
   CloseWorkArea(RO);
 end;
end;

Proc ИнициализироватьУсловияВыбытия;
 ClearVariable(УслИМЯ); ClearVariable(УслДЕБ); ClearVariable(УслКРЕ); ClearVariable(УслАНА);
 УслИМЯ[1]="Внутреннее перемещение объекта";
 УслДЕБ[1]="(((*.?.101.??.310&~(*.?.101.37.310))|*.?.102.??.320)&???.????.???????.???.?.???.??.???)|???.??.??.??.??.??.????.?.103.1?.330";
 УслКРЕ[1]="(((*.?.101.??.310&~(*.?.101.37.310))|*.?.102.??.320)&???.????.???????.???.?.???.??.???)|???.??.??.??.??.??.????.?.103.1?.330";
 УслАНА[1]="";

 УслИМЯ[2]="Отметка о выбытии объекта";
 УслДЕБ[2]="(???.????.???????.???.?.???.??.???&(*.?.304.04.310|*.?.401.2?.24?|*.?.401.2?.25?|*.?.401.2?.27?))|(???.?.??.?????.??.????.*&(*.?.401.1?.17?|*.?.401.1?.180))";
 УслКРЕ[2]="((*.?.101.??.410&~(*.?.101.37.410))|*.?.102.??.420)&???.????.???????.???.?.???.??.???";
 УслАНА[2]="";

 УслИМЯ[3]="Отметка о выбытии объекта";
 УслДЕБ[3]="(???.????.???????.???.?.???.??.???&(*.?.401.2?.24?|*.?.401.2?.25?|*.?.401.2?.27?))|(???.??.??.??.??.??.????.?.???.??.???&(*.?.401.1?.17?|*.?.401.1?.180))";
 УслКРЕ[3]="???.??.??.??.??.??.????.?.103.1?.430";
 УслАНА[3]="";
end;

Func СчетСоотвМаске(СЧ:String; УСЛсч:String) :Logical;
-- СЧ должно являтся полным значением, а не маской!
var Acc :String;
 if УСЛсч="": ^False; fi;
 if Name_S(СЧ)=" ": ^False; fi;
 УСЛсч="("+УСЛсч+")";
 for Account Acc=УСЛсч, Sort do if СЧ=Acc: ^True; fi; od;
 ^False;
end;

Func ПризнакСоотвМаске(Призн:String; УСЛан:String) :Logical;
-- Призн должно являтся полным значением, а не маской!
var Ana :String;
 if УСЛан="": ^False; fi;
 if Name_A(Призн)=" ": ^False; fi;
 if УСЛан="*": ^True; fi;
 for Sign Ana=УСЛан, Sort do if Призн=Ana: ^True; fi; od;
 ^False;
end;
znak:i;   
summa;
nnn[]:i=$;
Func ПризнакИзСтрокиАналитикиПроводки(x:Integer; VOC:String; ДебПров:Logical) :String;
-- x - номер проводки
var p :Integer;
var sep, ANA :String;
 sep=""; ANA="";
 p=TransNumSign(x, sep+VOC+".");
 if p>0: ANA=TransSignName(x, p); ^ANA; fi;
 if ДебПров: sep="+"; else sep="-"; fi;
 p=TransNumSign(x, sep+VOC+".");
 if p>0: ANA=TransSignName(x, p); ^SubStr(ANA, 2, 255); fi;
 ^ANA;
end;
var нетнфа[]:s;
Func СформироватьОпись(ДНП:Date; ДКП:Date) :Logical;
var ANA, УСЛf, УСЛt, tmp,ss :String;
var RO, i, num, x, len, k, j, y, z 2_,z10.:Integer;
var OK, Убыло :Logical;
 if ПроверкаДат=False: ^False; fi;
 УСЛf="";
 if нетПО=False: УСЛf=Объединить(УСЛf, if(КОД_ПО="П.*", "", "СТРПОДР='"+КОД_ПО+"'"), "&"); fi;
 if Use_МОЛ_МХЭ:
   УСЛf=Объединить(УСЛf, if(КОД_МОЛ="МОЛ.*", "", "МОЛ='"+КОД_МОЛ+"'"), " and ");
   УСЛf=Объединить(УСЛf, if(КОД_МХЭ="М.*", "", "МХЭ='"+КОД_МХЭ+"'"), " and ");
 fi;
 if znak>0:ss='ПЕРВ_СТОИМ';
    if znak=1:ss=ss+' >  ';
     | znak=2:ss=ss+' >= ';
     | znak=3:ss=ss+' <  ';
     | znak=4:ss=ss+' <= ';
     | znak=5:ss=ss+' =  ';
     | znak=6:ss=ss+' <> ';
    fi;
    if summa<>0:ss=ss+str(summa,2);
     | true: ss='';
    fi;
 fi;
 if ss<>'':
   УСЛf=Объединить(УСЛf, ss, " and ");
 fi;

 ClearVariable(нетнфа);
 RO=OpenWorkArea(CRDwork, "ИНВ_ВЕД", УСЛf);
 ShowProgress(0, "Поиск инвентарных карточек...");
 Try
   num=Records(RO);
   if num=0:
     Message("Инвентарных карточек по заданному"+Chr(13)+
             "условию отбора не найдено!"+Chr(13)+
             "Попробуйте изменить условия отбора.", mtInformation);
     ^False;
   fi;
   z=1;
   ОчиститьТаблицу;
   ShowProgress(num, "Обработка инвентарных карточек...");
   for x=1 to num do
     ProgressPos(x);
     ANA=""; УСЛt="";
     ss=GetFieldS(RO, x, "НФА");
     if name_a(ss)<>' ':
       ANA=Объединить(ANA, ss, "&");
       ss="УЧН."+GetFieldS(RO, x, "ИНВ");
       if name_a(ss)<>' ':
          ANA=Объединить(ANA, ss, "&");
          if нетПО=False: ANA=Объединить(ANA, КОД_ПО, "&"); fi;
          if Use_МОЛ_МХЭ:
            ANA=Объединить(ANA, КОД_МОЛ, "&");
            ANA=Объединить(ANA, КОД_МХЭ, "&");
          fi;
     2_     for z1=1..Упр_ДопУсл do
     2_       ANA=Объединить(ANA, ДОППРИЗН[z1], "&");
     2_     od;

          УСЛt=GetFieldS(RO, x, "СЧЕТНФА")+"{"+ANA+"}";
          ИнициализироватьУсловияВыбытия;
          len=LengthOfArray(УслАНА);
          Убыло=False;
          for Transaction k=УСЛt, 1.1.100, ДНП do
            j=TransSignCount(k);
            for y=1 to len do
              OK=True;
              if УслАНА[y]<>"":
                OK=False;
                for i=1 to j do
                  OK=ПризнакСоотвМаске(TransSignName(k, i), УслАНА[y]);
                  if OK: Break; fi;
                od;
              fi;
              OK=(OK and СчетСоотвМаске(TransDeb(k), УслДЕБ[y]));
              OK=(OK and СчетСоотвМаске(TransCre(k), УслКРЕ[y]));
              if OK: Break; fi;
            od;
            if OK: Убыло=True; Break; fi;
          end; --Transaction
          if Убыло=False: -- на начало периода НФА еще не выбыло (с учета или от подразделения и т.д.)
             for Transaction k=УСЛt, ДНП, ДКП do
                Убыло=True; Break;
             end; --Transaction
             if Убыло:
                КАРНОМ[z]=GetFieldS(RO, x, "НОМЕРБУМ");
                ИНВНОМ[z]=GetFieldS(RO, x, "ИНВ_ВЕД");
                tmp=GetFieldS(RO, x, "НФА");
                ИМЯНФА[z]=if(Name_A(tmp)<>"" and Name_A(tmp)<>" ", Name_A(tmp) , tmp);
                ВЫБДАТ[z]=GetFieldD(RO, x, "ВЫБЫТ_ДАТА");
                ВЫБ_ЖО[z]=GetFieldS(RO, x, "ВЫБЫТ_ЖО");
                if trim(ВЫБ_ЖО[z])='':
                  if ВЫБДАТ[z]>01.01.1980:ВЫБ_ЖО[z]='7';fi;
                fi;
                UPD_DD[z]=GetFieldD(RO, x, "LASTUPDATE");
                z=z+1;
             fi;
          fi;
       fi;
      | true:ДобавитьвМассив(нетнфа,true,false,ss);
     fi;
   od;
 Finally
   CloseWorkArea(RO);
   CloseProgress;
 end;
 num=длинамассива(нетнфа);
 if num>0:
    if вопрос('','Обнаружены карточки ОС по НФА^Mкоторых нет в списке НФА','Продолжить;Просмотреть список',mtWarning)=2:
      for x=1..num do
       trace(нетнфа[x]);
      od;
    fi;
 fi;
 num=LengthOfArray(КАРНОМ);
 if num=0:
   Message("Инвентарных карточек по заданному"+Chr(13)+
           "условию отбора не найдено!"+Chr(13)+
           "Попробуйте изменить условия отбора.", mtInformation);
   ^False;
 fi;
 Позиции=num;
 ^True;
end;

Proc ИнициализироватьУсловияОбновления;
 ClearVariable(УслИМЯ); ClearVariable(УслКРЕ); ClearVariable(УслДЕБ); ClearVariable(УслАНА);
 УслИМЯ[1] ="Принятие к учету ОС";
-- УслДЕБ[1] ="???.????.???????.???.?.???.??.???&(*.101.0?.310&~(*.101.07.310|*.101.08.310))";
 УслДЕБ[1] ="???.????.???????.???.?.???.??.???&(*.101.??.310&~(*.101.37.310))";
-- УслКРЕ[1] ="???.????.???????.???.?.106.01.410|00";
 УслКРЕ[1] ="(???.????.???????.???.?.???.??.???&(*.106.?1.310|*.304.04.310))|(???.?.??.?????.??.????.?.401.1?.1??&(*.1?.14?|*.1?.15?|*.1?.180))|00";
 УслАНА[1] ="";

 УслИМЯ[2] ="Принятие к учету нематериальных активов";
-- УслДЕБ[2] ="???.????.???????.???.?.102.01.320";
 УслДЕБ[2] ="???.????.???????.???.?.102.??.320";
-- УслКРЕ[2] ="???.????.???????.???.?.106.02.420|00";
 УслКРЕ[2] ="(???.????.???????.???.?.???.??.???&(*.106.??.?20|*.304.04.320))|(???.?.??.?????.??.????.?.401.1?.1??&(*.1?.14?|*.1?.15?|*.1?.180))|00";
 УслАНА[2] ="";

 УслИМЯ[3] ="Принятие к учету непроизведенных активов";
 УслДЕБ[3] ="???.??.??.??.??.??.????.?.103.??.330";
 УслКРЕ[3] ="???.??.??.??.??.??.????.?.106.13.430|00";
 УслАНА[3] ="";

 УслИМЯ[4] ="Результаты переоценки +";
 УслДЕБ[4] ="(((*.?.101.??.310&~(*.?.101.37.310))|*.?.102.??.320)&???.????.???????.???.?.???.??.???)|???.??.??.??.??.??.????.?.103.1?.330";
 УслКРЕ[4] ="*.?.401.30.000";
 УслАНА[4] ="";

 УслИМЯ[5] ="Результаты переоценки +";
 УслДЕБ[5] ="*.?.401.30.000";
 УслКРЕ[5] ="???.????.???????.???.?.104.??.4?0";
 УслАНА[5] ="";

 УслИМЯ[6] ="Результаты переоценки -";
 УслДЕБ[6] ="*.?.401.30.000";
 УслКРЕ[6] ="(((*.?.101.??.410&~(*.?.101.37.410))|*.?.102.??.420)&???.????.???????.???.?.???.??.???)|???.??.??.??.??.??.????.?.103.??.430";
 УслАНА[6] ="";

 УслИМЯ[7] ="Результаты переоценки -";
 УслДЕБ[7] ="???.????.???????.???.?.104.??.4?0";
 УслКРЕ[7] ="*.?.401.30.000";
 УслАНА[7] ="";

 УслИМЯ[8] ="Реконструкция, модернизация, достройка ОС";
 УслДЕБ[8] ="(*.?.101.??.310&~(*.?.101.37.310))&???.????.???????.???.?.???.??.???";
 УслКРЕ[8] ="???.????.???????.???.?.106.?1.?10";
 УслАНА[8] ="";

 УслИМЯ[9] ="Реконструкция, модернизация, достройка нематериальных активов";
 УслДЕБ[9] ="???.????.???????.???.?.102.??.320";
 УслКРЕ[9] ="???.????.???????.???.?.106.32.?20";
 УслАНА[9] ="";

 УслИМЯ[10]="Реконструкция, модернизация, достройка непровизведенных активов";
 УслДЕБ[10]="???.??.??.??.??.??.????.?.103.1?.330";
 УслКРЕ[10]="???.??.??.??.??.??.????.?.106.13.?30";
 УслАНА[10]="";

 УслИМЯ[11]="Внутреннее перемещение объекта";
 УслДЕБ[11]="(((*.?.101.??.310&~(*.?.101.37.310))|*.?.102.??.320)&???.????.???????.???.?.???.??.???)|???.??.??.??.??.??.????.?.103.??.330";
 УслКРЕ[11]="(((*.?.101.??.310&~(*.?.101.37.310))|*.?.102.??.320)&???.????.???????.???.?.???.??.???)|???.??.??.??.??.??.????.?.103.??.330";
 УслАНА[11]="";
 УслИМЯ[12]="Отметка о выбытии объекта";
 УслДЕБ[12]="(???.????.???????.???.?.*&(*.?.304.04.310|*.?.401.2?.24?|*.?.401.2?.25?|*.?.401.2?.27?))|(???.?.??.?????.??.????.?.*&(*.401.1?.17?|*.401.1?.180))";
 УслКРЕ[12]="((*.?.101.??.410&~(*.?.101.37.410))|*.?.102.??.420)&???.????.???????.???.?.???.??.???";
 УслАНА[12]="";
 УслИМЯ[13]="Отметка о выбытии объекта";
 УслДЕБ[13]="(???.????.???????.???.?.???.??.???&(*.?.401.2?.24?|*.?.401.2?.25?|*.?.401.2?.27?))|(???.??.??.??.??.??.????.?.???.??.???&(*.401.1?.17?|*.401.1?.180))";
 УслКРЕ[13]="???.??.??.??.??.??.????.?.103.??.430";
 УслАНА[13]="";
 УслИМЯ[14]="Начисление амортизации";
-- УслДЕБ[14]="???.????.???????.???.?.401.01.271|00";
 УслДЕБ[14]="(???.????.???????.???.?.???.??.???&(*.2.109.??.271|*.304.04.310|*.401.20.271))|(???.?.??.?????.??.????.?.401.1?.1??&(*.1?.14?|*.1?.15?|*.1?.180))|00";
 УслКРЕ[14]="???.????.???????.???.?.???.??.???&(*.?.104.?1.410|*.?.104.?2.410|*.?.104.?3.410|*.?.104.?4.410|*.?.104.?5.410|*.?.104.?6.410|*.?.104.?7.410|*.?.104.?8.410)";
 УслАНА[14]="";
 УслИМЯ[15]="Начисление амортизации";
 УслДЕБ[15]="(???.????.???????.???.?.???.??.???&(*.2.109.??.271|*.304.04.320|*.401.20.271))|(???.?.??.?????.??.????.?.401.1?.1??&(*.1?.14?|*.1?.15?|*.1?.180))|00";
 УслКРЕ[15]="???.????.???????.???.?.104.39.420";
 УслАНА[15]="";
end;
Func ПорядокДатыРядом(Элемент:Date; Слева:Logical) :Integer;
var nn, len :Integer;
 CopyArray(Buf_D, BufDD);
 nn=InsertInArraySort(BufDD, Элемент);
 len=LengthOfArray(BufDD);
 if Слева: if nn<2: ^0; else ^(nn-1); fi; else if nn>=len: ^0; else ^(nn+1); fi; fi;
end;
Func ОбновитьВсеИнвентарныеКарточки :Logical;
var RO, OA, ROнфа, ROакт, ROнак, ROдвж,ROост, num, len, nn, qq, yy, z, k, x, y, i, j, t :Integer;
var nK, nY :Integer;
var SumTrans, tmpN :Numeric;
var Режим, OK :Logical;
var МаскаСЧ, СЧНФА, СЧАМР, НФАa, ИНВa, tmp, ANA, СЧД, СЧК :String;
var dd, dt, df, dl, tmpD :Date;
var REC :Record;
 Режим=AutoRefresh;
 ToggleAutoRefresh(False);
 dd=ToDay+1;
 RO=OpenWorkArea(CRDwork, "ИНВ_ВЕД", "");
 ShowProgress(0, "Поготовка данных...");
 Try
   num=Records(RO);
   if num=0: Message("Инвентарных карточек не найдено.^MКартотека пустая!", mtInformation); ^False; fi;
   nn=EnqOkCancel("Обновление данных для всех инвентарных^Mкарточек может занять много времени.^MПродолжить?", mtWarning);
   if nn=cmCancel: ^False; fi;
   Refresh(False);
   ClearVariable(СЧ_ОС); ClearVariable(СЧ_АМ);
   СЧ_ОС[1 ]="101.11"; СЧ_АМ[1 ]='104.11.410';
   СЧ_ОС[2 ]="101.12"; СЧ_АМ[2 ]='104.12.410';
   СЧ_ОС[3 ]="101.13"; СЧ_АМ[3 ]='104.13.410';
   СЧ_ОС[4 ]="101.15"; СЧ_АМ[4 ]='104.15.410';
   СЧ_ОС[5 ]="101.18"; СЧ_АМ[5 ]='104.18.410';
   СЧ_ОС[6 ]="101.31"; СЧ_АМ[6 ]='104.31.410';
   СЧ_ОС[7 ]="101.32"; СЧ_АМ[7 ]='104.32.410';
   СЧ_ОС[8 ]="101.33"; СЧ_АМ[8 ]='104.33.410';
   СЧ_ОС[9 ]="101.34"; СЧ_АМ[9 ]='104.34.410';
   СЧ_ОС[10]="101.35"; СЧ_АМ[10]='104.35.410';
   СЧ_ОС[11]="101.36"; СЧ_АМ[11]='104.36.410';
   СЧ_ОС[12]="101.37"; СЧ_АМ[12]='104.37.410';
   СЧ_ОС[13]="101.38"; СЧ_АМ[13]='104.38.410';
   СЧ_ОС[14]="102.30"; СЧ_АМ[14]='104.39.420';
   МаскаСЧ="((*.?.101.??.310|*.?.102.??.320)&???.????.???????.???.?.???.??.???)|???.??.??.??.??.??.????.?.103.??.330";
   ROнфа=OpenWorkArea("РПО_НФА"          , "", "1=0");
   ROакт=OpenWorkArea("РПО_АКТЫ_УНФА"    , "", "1=0");
   ROнак=OpenWorkArea("РПО_НАКЛАДНАЯ"    , "", "1=0");
   ROдвж=OpenWorkArea("РПО_ОПЕРАЦИИДНФА" , "", "1=0");
   ROост=OpenWorkArea("РПО_ОСТ_НФА"      , "", "1=0");
   Try
     ИнициализироватьУсловияОбновления;
     nK=0; nY=0;
     ShowProgress(num, "Обновление инвентарных карточек");
     Try
       for z=1 to num do -- цикл по инв.карточкам
         if nK=0: -- если новая порция, то открываем RO на изменения
           BeginChanging(RO);
         fi;
         if nK>0: ShowProgress(num, "Обновление инвентарных карточек. Обновлено "+Str(nY+nK)+" шт. из "+Str(num)+" шт."); fi;
         nK=nK+1;
         ProgressPos(z);
         -- =========================================
         -- ОБНОВЛЕНИЕ ДАННЫХ ПО ИНВЕНТАРНОЙ КАРТОЧКЕ
         -- =========================================
         -- Выделяем счета учета
         НФАa=GetFieldS(RO, z, "НФА");
         ИНВa=GetFieldS(RO, z, "ИНВ");
         SetFilter(ROнфа, "Ukey="+RecordToString(SignToRecord(НФАa, False)));
         if Records(ROнфа)<>1: Message("Непредвиденная ошибка!^MВ картотеке [список НФА] не найден НФА^M"+НФАa, mtError); ^False; fi;
         СЧНФА=GetFieldS(RO, z, "СЧЕТНФА");
         if (Match(СЧНФА, "???.????.???????.???.?.101.??.???") and Name_S(SubStr(СЧНФА, 1, 30)+"310")<>" ") or
            (Match(СЧНФА, "???.????.???????.???.?.102.??.???") and Name_S(SubStr(СЧНФА, 1, 30)+"320")<>" "):
           nn=SearchInArray(СЧ_ОС, SubStr(СЧНФА, 24, 6), True, 1);
           if nn=-1: Message("Непредвиденная ошибка!^Mнет соответствие счета и НФА^M"+НФАa, mtError); ^False; fi;
           СЧАМР=SubStr(СЧНФА, 1, 23)+СЧ_АМ[nn];
           if Name_S(СЧАМР)=" ": Message("Счета "+СЧАМР+" нет в структуре учета!", mtError); ^False; fi;
         |  Match(СЧНФА, "???.??.??.??.??.??.????.?.103.??.???") and Name_S(SubStr(СЧНФА, 1, 33)+"330")<>" ":
           СЧАМР="";
         else Message("Непредвиденная ошибка!", mtError); ^False;
         fi;
         --
         ANA=РАБ.НФА.FUNC_LIB.Объединить(СЧНФА, СЧАМР, "|")+"{"+НФАa+"&УЧН."+ИНВa+"}";
         Try SumTrans=Saldo(ANA, dd); Except Message("Ошибка в условии отбора проводки!", mtError); ^False; end;
         --
         ClearVariable(Buf_N); ClearVariable(Buf_D); ClearVariable(BufDD);
         ОчиститьДляОбновления;
         x=1; len=LengthOfArray(УслАНА); df=1.1.100; dl=df;
         --
         for Transaction k=ANA, 1.1.100, dd do
           dt=TransDate(k);
           СЧД=TransDeb(k);
           СЧК=TransCre(k);
           SumTrans=TransSum(k);
           REC=TransRecord(k);
           j=TransSignCount(k);
           for y=x to len do
             OK=True;
             if УслАНА[y]<>"":
               OK=False;
               for i=1 to j do
                 OK=ПризнакСоотвМаске(TransSignName(k, i), УслАНА[y]);
                 if OK: Break; fi;
               od;
             fi;
             OK=(OK and СчетСоотвМаске(СЧД, УслДЕБ[y]));
             OK=(OK and СчетСоотвМаске(СЧК, УслКРЕ[y]));
             if OK: Break; fi;
           od;
           -- ПОИСК ДАННЫХ
           if y=1 or  --Принятие к учету ОС
              y=2 or  --Принятие к учету непроизведенных активов
              y=3  :  --Принятие к учету нематериальных активов
             t=PutFieldD(RO, z, "ОПРИХ_ДАТА", dt);
             tmp=ПризнакИзСтрокиАналитикиПроводки(k, "ЖО",  True);
             t=PutFieldS(RO, z, "ОПРИХ_ЖО"  , tmp);
             ttМХЭ=ПризнакИзСтрокиАналитикиПроводки(k, "М",   True);
             ttМОЛ=ПризнакИзСтрокиАналитикиПроводки(k, "МОЛ", True);
             t=PutFieldS(RO, z, "МХЭ_FIRST", ttМХЭ);
             t=PutFieldS(RO, z, "МОЛ_FIRST", ttМОЛ);
             if REC<>NIL:
               if TransCardFile(k)="РПО_ОПЕРАЦИИДНФА": t=PutFieldI(RO, z, "ДНФАID", RecordToInteger(REC));
                  tmp="ВИДДОК.НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306001";
                  if Name_A(tmp)<>" ":
                    OK=False;
                    SetFilter(ROдвж, "Ukey="+RecordToString(REC));
                    if Records(ROдвж)=1:
                      OA=OpenArray(ROдвж, 1, "ДОК", "", "ВИДДОК='"+tmp+"'");
                      nn=0;
                      if Records(OA)=1: nn=GetFieldI(OA, 1, "UKEYCRD"); fi;
                      CloseWorkArea(OA);
                      if nn>0:
                        SetFilter(ROакт, "Ukey={"+Str(nn)+"}");
                        if Records(ROакт)=1:
                          tmp=GetFieldS(ROакт, 1, "БУМНОМЕР");
                          t=PutFieldS(RO, z, "НОМ_ВЭКСП", tmp);
                          tmpD=GetFieldD(ROакт, 1, "ДАТААКТА");
                          t=PutFieldD(RO, z, "ДАТ_ВЭКСП", tmpD);
                          OK=True;
                        fi;
                      fi;
                    fi;
                  fi;
                | TransCardFile(k)="РПО_ОСТ_НФА":
                    SetFilter(ROост, "Ukey="+RecordToString(REC));
                    if Records(ROост)=1:
                      OA=OpenArray(ROост, 1, "ПОЗИЦИИОС", "", "НФА='"+НФАa+"' and УЧНОМ='УЧН."+ИНВa+"'");
                      nn=0;
                      if Records(OA)=1:
                          tmpD=GetFieldD(OA, 1, "ДЭКСПЛ");
                          if tmpD>1.1.100:t=PutFieldD(RO, z, "ДАТ_ВЭКСП", tmpD);
                           | true:tmpD=1.1.100;
                          fi;

                          tmpD=GetFieldD(OA, 1, "ДУЧЕТ");
                          if tmpD>1.1.100:t=PutFieldD(RO, z, "ОПРИХ_ДАТА", tmpD);
                           | true:tmpD=1.1.100;
                          fi;
                          OK=True;
                      fi;
                      CloseWorkArea(OA);
                    fi;
               fi;
             fi;
             if OK=False:
               t=PutFieldS(RO, z, "НОМ_ВЭКСП", "");
               t=PutFieldD(RO, z, "ДАТ_ВЭКСП", dt);
             fi;
             tmpN=Saldo(СЧНФА+"{"+НФАa+"&УЧН."+ИНВa+"}", dt+1);
             t=PutFieldN(RO, z, "ПЕРВ_СТОИМ", tmpN);
             if СЧАМР<>"":
               tmpN=Abs(Saldo(СЧАМР+"{"+НФАa+"&УЧН."+ИНВa+"}", dt+1));
               t=PutFieldN(RO, z, "П_АМОРТ_НАКОП", tmpN);
             fi;
             df=dt;
             if СЧК="00": tmp="остатки на"+Chr(13)+DateToString(dt+1); else tmp="к учету с"+Chr(13)+DateToString(dt); fi;
             t=PutFieldS(RO, z, "FIRST_DATE", tmp);
             x=4;
           |  y=4 or  --Результаты переоценки +
              y=5 or  --Результаты переоценки +
              y=6 or  --Результаты переоценки -
              y=7  :  --Результаты переоценки -
             nn=SearchInArray(ПaДАТА, dt, True, 1);
             if nn=-1: qq=InsertInArraySort(ПaДАТА, dt); else qq=nn; fi;
             if ПaЖО[qq]="": ПaЖО[qq]=ПризнакИзСтрокиАналитикиПроводки(k, "ЖО",  True); fi;
             ПaСУММА[qq]=ПaСУММА[qq]+SumTrans;
             --
             nn=qq;
             if ПaДАТА[nn]>df and df<>1.1.100:
               yy=SearchInArray(АaDATE_ACCOUNT, ПaДАТА[nn], True, 1);
               if not(yy>0 and АaТИП[yy]=2):
                 qq=InsertInArraySort(АaDATE_ACCOUNT, ПaДАТА[nn]);
                 InsertInArray(АaТИП, qq, 2);
               fi;
             fi;
           |  y=8 or  --Реконструкция, модернизация, достройка ОС
              y=9 or  --Реконструкция, модернизация, достройка нематериальных активов
              y=10 :  --Реконструкция, модернизация, достройка непровизведенных активов
             nn=SearchInArray(РaДАТА, dt, True, 1);
             if nn=-1: qq=InsertInArraySort(РaДАТА, dt); else qq=nn; fi;
             if РaЖО[qq]="": РaЖО[qq]=ПризнакИзСтрокиАналитикиПроводки(k, "ЖО",  True); fi;
             РaСУММА[qq]=РaСУММА[qq]+SumTrans;
             --
             nn=qq;
             if РaДАТА[nn]>df and df<>1.1.100:
               yy=SearchInArray(АaDATE_ACCOUNT, РaДАТА[nn], True, 1);
               if not(yy>0 and АaТИП[yy]=1): 
                 qq=InsertInArraySort(АaDATE_ACCOUNT, РaДАТА[nn]);
                 InsertInArray(АaТИП, qq, 1);
               fi;
               --
               tmp="ВИДДОК.НФА.ДОКУМЕНТЫ.АКТЫ.ОКУД_0306002";
               if Name_A(tmp)<>" " and REC<>NIL: OK=True; else OK=False; fi;
               if OK:
                 OK=False;
                 SetFilter(ROдвж, "Ukey="+RecordToString(REC));
                 if Records(ROдвж)=1:
                   OA=OpenArray(ROдвж, 1, "ДОК", "", "ВИДДОК='"+tmp+"'");
                   nn=0;
                   if Records(OA)=1: nn=GetFieldI(OA, 1, "UKEYCRD"); fi;
                   CloseWorkArea(OA);
                   if nn>0:
                     SetFilter(ROакт, "Ukey={"+Str(nn)+"}");
                     if Records(ROакт)=1:
                       InsertInArray(АaНОМ_АКТА, qq, GetFieldS(ROакт, 1, "БУМНОМЕР"));
                       InsertInArray(АaДАТ_АКТА, qq, GetFieldD(ROакт, 1, "ДАТААКТА"));
                       OK=True;
                     fi;
                   fi;
                 fi;
               fi;
               if OK=False:
                 InsertInArray(АaНОМ_АКТА, qq, "");
                 InsertInArray(АaДАТ_АКТА, qq, dt);
               fi;
             fi;
           |  y=11: --Внутреннее перемещение объекта
             yy=LengthOfArray(ВaДАТА)+1;
             InsertInArray(ВaДАТА, yy, dt);
             tmp=ПризнакИзСтрокиАналитикиПроводки(k, "ЖО",  True);
             ttМХЭ=ПризнакИзСтрокиАналитикиПроводки(k, "М",   True);
             ttМОЛ=ПризнакИзСтрокиАналитикиПроводки(k, "МОЛ", True);
             InsertInArray(ВaЖО, yy, tmp);
             InsertInArray(ВaМХЭ, yy, ttМХЭ);
             InsertInArray(ВaМОЛ, yy, ttМОЛ);
             --
             tmp="ВИДДОК.НФА.ДОКУМЕНТЫ.НАКЛАДНЫЕ.ОКУД_0504234";
             if Name_A(tmp)<>" " and REC<>NIL: OK=True; else OK=False; fi;
             if OK:
               OK=False;
               SetFilter(ROдвж, "Ukey="+RecordToString(REC));
               if Records(ROдвж)=1:
                 OA=OpenArray(ROдвж, 1, "ДОК", "", "ВИДДОК='"+tmp+"'");
                 nn=0;
                 if Records(OA)=1: nn=GetFieldI(OA, 1, "UKEYCRD"); fi;
                 CloseWorkArea(OA);
                 if nn>0:
                   SetFilter(ROнак, "Ukey={"+Str(nn)+"}");
                   if Records(ROнак)=1:
                     InsertInArray(ВaНОМЕР, yy, GetFieldS(ROнак, 1, "НОМЕРБУМ"));
                     OK=True;
                   fi;
                 fi;
               fi;
             fi;
             if OK=False: InsertInArray(ВaНОМЕР, yy, ""); fi;
           |  y=12: --Отметка о выбытии объекта
             t=PutFieldD(RO, z, "ВЫБЫТ_ДАТА", dt);
             tmp=ПризнакИзСтрокиАналитикиПроводки(k, "ЖО",  True);
             t=PutFieldS(RO, z, "ВЫБЫТ_ЖО", tmp);
             k=14;
           |  y=13: --Отметка о выбытии объекта
             t=PutFieldD(RO, z, "ВЫБЫТ_ДАТА", dt);
             tmp=ПризнакИзСтрокиАналитикиПроводки(k, "ЖО",  True);
             t=PutFieldS(RO, z, "ВЫБЫТ_ЖО", tmp);
             k=14;
           |  y=14 or  --Амортизация объекта
              y=15:    --Амортизация объекта
             nn=SearchInArray(Buf_N, SumTrans, True, 1);
             if nn=-1: qq=InsertInArraySort(Buf_N, SumTrans); InsertInArray(Buf_D, qq, dt); fi;
             dl=dt;
           fi;
         od; -- цикл по проводкам
         if СЧАМР<>"":
           len=Max(LengthOfArray(ПaДАТА), LengthOfArray(РaДАТА));
           if len>0:
             len=LengthOfArray(АaDATE_ACCOUNT);
             i=len;
             while i>0 do
               dt=АaDATE_ACCOUNT[i];
               АaАМОРТ_НАКОП[i]=Abs(Saldo(СЧАМР+"{"+НФАa+"&УЧН."+ИНВa+"}", dt));
               АaСУММА_МЕС[i]=0;
               nn=SearchInArray(Buf_D, dt);
               if nn>0:
                 qq=nn;
                 АaСУММА_МЕС[i]=Buf_N[qq];
               else
                 qq=ПорядокДатыРядом(dt, True);
                 if qq>0: АaСУММА_МЕС[i]=Buf_N[qq]; fi;
               fi;
               if АaСУММА_МЕС[i]>0: АaБАЛ_СТОИМ[i]=Abs(Saldo(СЧНФА+"{"+НФАa+"&УЧН."+ИНВa+"}", dt)); fi;
               i=i-1;
             end;
           fi;
           if АaСУММА_МЕС[1]>0: tmpN=АaСУММА_МЕС[1]; t=PutFieldN(RO, z, "П_СУММА_МЕС", tmpN); fi;
         fi;
         --
         tmp=GetFieldS(RO, z, "ИНВ_ВЕД");
         if tmp="": 
           tmp=НФА.СЕРВИС.КОНСТРУКТОР.ИНВ_НОМЕРА.СформироватьВедИнвНомер(СЧНФА, НФАa, GetRecordKey(RO, z), False);
           t=PutFieldS(RO, z, "ИНВ_ВЕД", tmp);
         fi;
         tmpN=GetFieldI(ROнфа, 1, "КЛГРУПП");
         t=PutFieldI(RO, z, "АМОРТ_ГРУП", Int(tmpN));
         tmpN=GetFieldN(ROнфа, 1, "СРОКАМ");
         t=PutFieldN(RO, z, "АМОРТ_СРОК", tmpN);
         tmp=GetFieldS(ROнфа, 1, "ОКОФ");
         t=PutFieldS(RO, z, "ОКОФ", tmp);
         tmpN=Abs(Saldo(СЧНФА+"{"+НФАa+"&УЧН."+ИНВa+"}", dd));
         t=PutFieldN(RO, z, "СТОИМ_ОТЧ", tmpN);
         if СЧАМР<>"":
           tmpN=Abs(Saldo(СЧАМР+"{"+НФАa+"&УЧН."+ИНВa+"}", dd));
           t=PutFieldN(RO, z, "СНАЧ_ЭКСП", tmpN);
         fi;
         t=PutFieldD(RO, z, "LASTUPDATE", ToDay);
         t=PutFieldS(RO, z, "МХЭ", ttМХЭ);
         t=PutFieldS(RO, z, "МОЛ", ttМОЛ);
         -- Запись таблиц
         len=LengthOfArray(ПaДАТА);
         OA=OpenArray(RO, z, "ПЕРЕОЦЕНКА", "");
         DeleteAllRecords(OA);
         if len>0:
           for i=1 to len do
             k=InsertRecord(OA, i);
             t=PutFieldD(OA, k, "ДАТА" , ПaДАТА[i] );
             t=PutFieldS(OA, k, "ЖО"   , ПaЖО[i]   );
             t=PutFieldN(OA, k, "СУММА", ПaСУММА[i]);
           od;
         fi;
         CloseWorkArea(OA);
         len=LengthOfArray(РaДАТА);
         OA=OpenArray(RO, z, "РЕКОНСТРУКЦИЯ", "");
         DeleteAllRecords(OA);
         if len>0:
           for i=1 to len do
             k=InsertRecord(OA, i);
             t=PutFieldD(OA, k, "ДАТА" , РaДАТА[i] );
             t=PutFieldS(OA, k, "ЖО"   , РaЖО[i]   );
             t=PutFieldN(OA, k, "СУММА", РaСУММА[i]);
           od;
         fi;
         CloseWorkArea(OA);
         len=LengthOfArray(ВaДАТА);
         OA=OpenArray(RO, z, "ВНУТ_ПЕРЕМЕЩ", "");
         DeleteAllRecords(OA);
         if len>0:
           for i=1 to len do
             k=InsertRecord(OA, i);
             t=PutFieldD(OA, k, "ДАТА" , ВaДАТА[i] );
             t=PutFieldS(OA, k, "НОМЕР", ВaНОМЕР[i]);
             t=PutFieldS(OA, k, "ЖО"   , ВaЖО[i]   );
             t=PutFieldS(OA, k, "МХЭ"  , ВaМХЭ[i]  );
             t=PutFieldS(OA, k, "МОЛ"  , ВaМОЛ[i]  );
           od;
         fi;
         CloseWorkArea(OA);
         if СЧАМР<>"":
           len=LengthOfArray(АaDATE_ACCOUNT);
           OA=OpenArray(RO, z, "НАЧ_АМОРТ", "");
           DeleteAllRecords(OA);
           if len>0:
             for i=1 to len do
               k=InsertRecord(OA, i);
               t=PutFieldD(OA, k, "ДАТ_АКТА"     , АaДАТ_АКТА[i]     );
               t=PutFieldS(OA, k, "НОМ_АКТА"     , АaНОМ_АКТА[i]     );
               t=PutFieldN(OA, k, "БАЛ_СТОИМ"    , АaБАЛ_СТОИМ[i]    );
               t=PutFieldN(OA, k, "СУММА_МЕС"    , АaСУММА_МЕС[i]    );
               t=PutFieldN(OA, k, "АМОРТ_НАКОП"  , АaАМОРТ_НАКОП[i]  );
               t=PutFieldD(OA, k, "DATE_ACCOUNT" , АaDATE_ACCOUNT[i] );
               t=PutFieldI(OA, k, "ТИП"          , АaТИП[i]          );
             od;
           fi;
           CloseWorkArea(OA);
         fi;
         if nK=500: --записываем очередную порцию
           EndChanging(RO);
           nY=nY+nK;
           nK=0;
         fi;
       od; -- цикл по инв.карточкам
       if nK>0: EndChanging(RO); nY=nY+nK; fi; --если последняя порция неполная
     Except
       if ErrorCode=21857:
         Message(if(z>nY, "Всего записано "+Str(nY)+" записей из "+Str(num)+"."+Chr(13), "")+
                         "Картотека ["+CRDwork+"] доступна только для чтения."+Chr(13)+
                         "Запись данных инвентарной карточки невозможна!"
                , mtError);
       | True:
         Message(if(z>nY, "Всего записано "+Str(nY)+" записей из "+Str(num)+"."+Chr(13), "")+
                         "Ошибка "+Str(ErrorCode)+"."+Chr(13)+
                         "Запись данных инвентарной карточки невозможна!"
                , mtError);
       fi;
       CancelChanging(RO);
       ^False;
     end;
   Finally
     CloseWorkArea(ROдвж);
     CloseWorkArea(ROнак);
     CloseWorkArea(ROакт);
     CloseWorkArea(ROнфа);
     CloseWorkArea(ROост);
   end;
 Finally
   CloseProgress;
   CloseWorkArea(RO);
   ToggleAutorefresh(Режим);
 end;
 ^True;
end;

2-- События клеток
Func Field_onEnter(Field:String; Iter:Integer) :Logical; -- на входе в клетку
var tmp :String;
 if Field="УЧРЕЖ_ИМЯ" or
    Field="ОКПО"    : Реквизиты;
                      ^False;
 |  Field="ИМЯ_ПО"  : StoreANA=КОД_ПО;
                      tmp=AnaElection("П.*", False, False, КОД_ПО);
                      if tmp="": ^False; fi;
                      КОД_ПО=tmp;
                      if КОД_ПО<>StoreANA: if ОтменитьИзмененияУсловийОтчета: КОД_ПО=StoreANA; fi; fi;
                      ^False;
 |  Field="ИМЯ_МХЭ" : StoreANA=КОД_МХЭ;
                      tmp=AnaElection("М.*", False, False, КОД_МХЭ);
                      if tmp="": ^False; fi;
                      КОД_МХЭ=tmp;
                      if КОД_МХЭ<>StoreANA: if ОтменитьИзмененияУсловийОтчета: КОД_МХЭ=StoreANA; fi; fi;
                      ^False;
 |  Field="ИМЯ_МОЛ" : StoreANA=КОД_МОЛ;
                      tmp=AnaElection("МОЛ.*", False, False, КОД_МОЛ);
                      if tmp="": ^False; fi;
                      КОД_МОЛ=tmp;
                      if КОД_МОЛ<>StoreANA: if ОтменитьИзмененияУсловийОтчета: КОД_МОЛ=StoreANA; fi; fi;
                      ^False;
 |  Field="ДатаНП"  : OldDate=ДатаНП;
 |  Field="ДатаКП"  : OldDate=ДатаКП;
 |  Field="I1"      : StoreANA=КОД_ПО; КОД_ПО="П.*";
                      if КОД_ПО<>StoreANA:  if ОтменитьИзмененияУсловийОтчета: КОД_ПО =StoreANA; fi; fi;
                      ^False;
 |  Field="I2"      : StoreANA=КОД_МОЛ; КОД_МОЛ="МОЛ.*";
                      if КОД_МОЛ<>StoreANA: if ОтменитьИзмененияУсловийОтчета: КОД_МОЛ=StoreANA; fi; fi;
                      ^False;
 |  Field="I3"      : StoreANA=КОД_МХЭ; КОД_МХЭ="М.*";
                      if КОД_МХЭ<>StoreANA: if ОтменитьИзмененияУсловийОтчета: КОД_МХЭ=StoreANA; fi; fi;
                      ^False;
 |  Field="A"       : tmp=asString(Template.Name); ДобавитьСтроку(tmp, Iter); ^False;
 |  Field="D"       : tmp=asString(Template.Name);  УдалитьСтроку(tmp, Iter); ^False;
 fi;
 ^True;
end; 

Proc Field_onExit(Field:String; Iter:Integer); -- на выходе из клетки
 if Field="УЧРЕЖ_ИМЯ" or
    Field="ОКПО"     : if УЧРЕЖ_ИМЯ="": УЧРЕЖ_КОД=""; ОКПО=""; fi;
 |  Field="ДатаНП"   : if ДатаНП<>OldDate: if ОтменитьИзмененияУсловийОтчета: ДатаНП=OldDate; fi; fi;
 |  Field="ДатаКП"   : if ДатаКП<>OldDate: if ОтменитьИзмененияУсловийОтчета: ДатаКП=OldDate; fi; fi;
 |  Field="ИСПОЛФИО" : if ИСПОЛФИО="": ИСПОЛДОЛ=""; fi;
 fi;
end;

Func Дата_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
var dd, ddSave : Date;
var name :String;
 Template.HideEditor(False);
 name=asString(Template.Field);
 ddSave=GetDate;
 dd=ВыборДаты(ddSave);
 if name="ДатаНП" or name="ДатаКП":
   if dd<>ddSave:
     if ОтменитьИзмененияУсловийОтчета: dd=ddSave; fi;
   fi;
 fi;
 SetDate(dd);
 ^"";
end;

Func Сотрудники_OnLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var REC: Record;
var v1, v2, Sender, tmp :String;
 Template.HideEditor(False);
 REC=NIL;
 Sender=AsString(Template.Field);
 if Sender="ИСПОЛФИО": tmp=ИСПОЛФИО; else tmp=""; fi;
 REC=OpenCardFile("СОТРУДНИКИ", "", SignToRecord(tmp), crdRecordOnly);
 if REC=NIL: ^Cur; fi;
 v1=GetCardFieldS("СОТРУДНИКИ", REC, "ДОЛЖНОСТЬ.ДОЛЖ");
 v2=GetCardFieldS("СОТРУДНИКИ", REC, "ФАМИЛИЯ")+" "+GetCardFieldS("СОТРУДНИКИ", REC, "ИНИЦИАЛЫ");
 if Sender="ИСПОЛДОЛ" or Sender="ИСПОЛФИО": ИСПОЛДОЛ=v1; ИСПОЛФИО=v2;
 fi;
 ^"";
end;

2-- События объектов
--Proc btnOnClick(Sender:String); -- объекты при нажатии
--var RUN :Logical;
--var nn :Integer;
-- if Sender="btnClose"   : Close;
-- |  Sender="btnПечать"  : РАБ.НАСТР_ПЕЧАТЬ.Prn("","","RPO_STD_000.cfg","",1);
-- |  Sender="btnРасчет"  : if СформироватьОпись(ДатаНП, ДатаКП): Message("Формирование описи инвентарных карточек^Mпо учету основных средств успешно завершено!", mtInformation); fi;
-- |  Sender="btnОбновить": RUN=False;
--                          if IsBlankOpen(BLNwork):
--                            Message("Обнаружен открытый бланк инвентарной карточки.^MЗакройте его!", mtError);
--                            Exit;
--                          fi;
--                          if НеНапомин2=False:
--                            nn=Enquiry("Выберите действие...", "Для корректной работы должно быть закрыто^Mокно картотеки (браузер) инвентарной карточки.^MПроверьте и закройте его!", "Отмена;Продолжить;Не напоминать", mtConfirmation);
--                            if nn=1: Exit;
--                            |  nn=2: RUN=True;
--                            |  nn=3: НеНапомин2=True; RUN=True;
--                            fi;
--                          else
--                            RUN=True;
--                          fi;
--                          if RUN:
--                            if ОбновитьВсеИнвентарныеКарточки:
--                              Message("Обновление инвентарных карточек прошло успешно!", mtInformation);
--                            fi;
--                          fi;
-- fi;
--end;

Proc cbUse_МОЛ_МХЭ_onChange(Sender:String);
 СекцШапка.CanPrint=Use_МОЛ_МХЭ;
end;

2-- События шаблона
Proc Template_OnOpen(Create:Logical); -- при открытии шаблона
var tmp :String;
 Очистить;
 СекцШапка.CanPrint=Use_МОЛ_МХЭ;
 РАБ.НАСТР_ПЕЧАТЬ.Cfg("","RPO_STD_000.cfg"); -- стандартная настройка
 tmp=UserName(AliasName("РПО_ИНВКАРТ_ОС"));
 Пользов=if(tmp<>"", "Пользователь - "+tmp, "Пользователь локальной версии");
 if ДатаНП=1.1.100 and ДатаКП=1.1.100: ДатаКП=ToDay; fi;
 Template.Object="btnРасчет";
end;

Proc Template_OnClose(Destroy:Logical); -- при закрытии шаблона
 Очистить;
end;
Функ ДОПСПР_ПриОбзоре(Сек: Строка; Стр: Целое; Столб: Целое; Тек: Строка): Строка;

  Возврат ВыборПризнака('*',true);
end;


Функ ДОППРИЗН_ПриОбзоре(Сек: Строка; Стр: Целое; Столб: Целое; Тек: Строка): Строка;

  Возврат ВыборПризнака(ДОПСПР[Стр]);
end;

--var Позиции:I;
--var НФА[]:S;
--var УчНФА[]:S;
--var ИмяНФА[]:S;
--var ИнвВед[]:S;
--var Датт[]:Д;
--var Стоим[]:N;
--var Выгр[]:L;
--var Ukey[]:S;
var ВИШН:l=false;
var мосн_усл:s=if(флмосн,'(М.*МОСН*)','(М.*&~М.*МОСН*)');
var не_мосн_усл:s=if(не флмосн,'(М.*МОСН*)','(М.*&~М.*МОСН*)');
var НФА_ИНВ[]:S;
var aAna[]:S;
func ВзятьДатуПоследнейПроводкиОС(ss:s;dn:d;dk:d):d;
var  t:integer;
  for transaction t=ss ,dn,dk, Reverse
  do
   ^TransDate(t);
  od;
^1.1.100;
end;
Proc Загрузка;
var OWA,i:I;
var len:i;
var ВременныйФайл, aVal1, aVal2, aDeb, aCre, aComment,КОДНФА,ИНВНОМ_,ss,НФА_,УЧНФА_,ANA: String;
var aSum1, aSum2,nn,цена,кол: Numeric;
var aDate,dd: Date;
var Rep :Report;
var j, k, y, x, z ,jj,tt,z1:Integer;
var rec:record;
var ll:l;
ОчиститьТаблицу;
--ClearVariable(Позиции);
--ClearVariable(НФА);
--ClearVariable(УчНФА);
--ClearVariable(ИмяНФА);
--ClearVariable(ИнвВед);
--ClearVariable(Датт);
--ClearVariable(Стоим);
--ClearVariable(Выгр);
--ClearVariable(Ukey);

--ClearVariable(КАРНОМ);
--ClearVariable(ИНВНОМ);
--ClearVariable(ИМЯНФА);
--ClearVariable(ВЫБДАТ);
--ClearVariable(ВЫБ_ЖО);
--ClearVariable(UPD_DD);

  z=0;

-- OWA=OpenWorkArea('РПО_ИНВКАРТ_ОС','Номер',Фильтр);
-- try
--  x=Records(OWA);
--  ShowProgress(Records(OWA),'Загрузка данных из картотеки');
--  for i=1 to x do
--    ProgressPos(i);
--    z=z+1;
--    НФА[z]=GetFieldS(OWA,i,'НФА');
--    УчНФА[z]=GetFieldS(OWA,i,'ИНВ');
--    ИмяНФА[z]=GetFieldS(OWA,i,'НФА_ИМЯ');
--    ИнвВед[z]=GetFieldS(OWA,i,'ИНВ_ВЕД');
--    Датт[z]=GetFieldD(OWA,i,'ДАТ_ВЭКСП');
--    Стоим[z]=GetFieldN(OWA,i,'СТОИМ_ОТЧ');
--    Ukey[z]=RecordToString(GetRecordKey(OWA,i));
--    if остаток('*.101.??.???|*.102.??.???{'+НФА[z]+'&УЧН.'+trim(УчНФА[z])+'}',датафильра_наличие)<=200000:
--      НФА[z]='';
--      УчНФА[z]='';
--      ИмяНФА[z]='';
--      ИнвВед[z]='';
--      Датт[z]=1.1.100;
--      Стоим[z]=0;
--      Ukey[z]='';
--      z=z-1;
--    fi;
--  od;
--  CloseProgress;
-- finally
-- CloseWorkArea(OWA);
-- end;
-- Позиции=z;
-- if НФА[z]='':deleteframe(Позиции,Позиции);fi;
       ANA='НФА.*&УЧН.*';

       if нетПО=False: ANA=Объединить(ANA, КОД_ПО, "&"); fi;
       if Use_МОЛ_МХЭ:
         ANA=Объединить(ANA, КОД_МОЛ, "&");
         ANA=Объединить(ANA, КОД_МХЭ, "&");
       fi;
       for z1=1..Упр_ДопУсл do
         ANA=Объединить(ANA, ДОППРИЗН[z1], "&");
       od;

   ВременныйФайл=PlanVar('CACHE')+'\ВременныйФайлОстатков.jur';
   if ExistFile(ВременныйФайл): DeleteFile(ВременныйФайл); fi;

--   len=TujReport(ВременныйФайл, 1.1.100, ДатаКП, '*.101.??.???|*.102.??.???', 'НФА.101.06.КЭО.М.ШКАФ.ХОЗЯЙСТВЕННЫЙ&УЧН.00039*&(М.*&~М.*МОСН*)', "ДНФА|МОЛ|М|ДВИЖ_НФА|П|К|КТ|ВД|ММДД|ЗН|ПБС", "", "", TujRepCrossTurn+TujRepCombinedAna, False);
   if ВИШН:
      len=TujReport(ВременныйФайл, 1.1.100, ДатаКП, '*.101.??.???|*.102.??.???', ANA+'&'+мосн_усл, "ДНФА|МОЛ|М|ДВИЖ_НФА|П|К|КТ|ВД|ММДД|ЗН|ПБС", "", "", TujRepCrossTurn+TujRepCombinedAna, False);
    | true:
      len=TujReport(ВременныйФайл, 1.1.100, ДатаКП, '*.101.??.???|*.102.??.???', ANA, "ДНФА|МОЛ|М|ДВИЖ_НФА|П|К|КТ|ВД|ММДД|ЗН|ПБС", "", "", TujRepCrossTurn+TujRepCombinedAna, False);
   fi;
   ANA=trim(ВыделитьСлова(3,КоличествоСлов(ANA,'&')-2,ANA,'&'));
   if ANA<>'':ANA='&'+ANA;fi;
   if len>0:
     OpenTextJur(ВременныйФайл);
     ShowProgress(len, "Поиск НФА и расчет остатков...");
     Try
       ClearVariable(НФА_ИНВ);

       while not GetTransFromTextJur(aDate, aSum1, aVal1, aSum2, aVal2, aDeb, aCre, aAna, aComment) do
         ProgressPos(y);y=y+1;
         k=LengthOfArray(aAna);
         if k>0:
           КОДНФА=""; ИНВНОМ_=" ";
           for i=1 to k do
             if Match(aAna[i], "НФА.*"):
               x=Pos(":", aAna[i]);
               if x>0:
                  ss=SubStr(aAna[i], 1, x-1);
                  aAna[i]=ss;
               fi;
               КОДНФА=aAna[i];
             |  Match(aAna[i], "УЧН.*") or Match(aAna[i], "+УЧН.*"):
               if SubStr(aAna[i], 1, 1)='+': ИНВНОМ_=SubStr(aAna[i], 2, 255); else ИНВНОМ_=aAna[i]; fi;
             fi;
           od;
           if КОДНФА<>"" and ИНВНОМ_<>"":
              addinarray(НФА_ИНВ,true,false,КОДНФА+'&'+ИНВНОМ_);
           fi;
         fi;
       end; -- while
     Finally
       CloseProgress;
       CloseTextJur;
       if ExistFile(ВременныйФайл): DeleteFile(ВременныйФайл); fi;
     end;
   fi;
   len=LengthOfArray(НФА_ИНВ);
   ShowProgress(len, "Проверка ОС с учетом выбранного периода...");
   clearvariable(aAna);
   for i=1..len do
     ProgressPos(i);
     ll=false;
     if ВИШН:
        ll=ll or остаток('*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+ANA+'&'+мосн_усл+'}',ДатаНП)>0;
        if not ll:
           ll=ll or оборот('+*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+ANA+'&'+мосн_усл+'}',ДатаНП,ДатаКП)>0;
        fi;
        if not ll:
           ll=ll or оборот('-*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+ANA+'&'+мосн_усл+'}',ДатаНП,ДатаКП)>0;
        fi;
      | true:
        ll=ll or остаток('*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+ANA+'}',ДатаНП)>0;
        if not ll:
           ll=ll or оборот('+*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+ANA+'}',ДатаНП,ДатаКП)>0;
        fi;
        if not ll:
           ll=ll or оборот('-*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+ANA+'}',ДатаНП,ДатаКП)>0;
        fi;
     fi;

--     цена=остаток('*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+'}',датафильра_наличие);
--     кол=остаток('*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+'}',датафильра_наличие,'КОЛ');
--     if кол>=1:цена=цена/кол;fi;
--     ll=false;

--     if ФлУслЦен3000_20000 and not ll:
--        ll=(цена>=3000 and цена<20000);
--     fi;
--     if ФлУслЦен20000_200000 and not ll:
--        ll=(цена>=20000 and цена<200000);
--     fi;
--     if ФлУслЦен200000_ and not ll:
--        ll=(цена>=200000);
--     fi;
     if ll:
        AddInArray(aAna,true,false,НФА_ИНВ[i]);
--        deletefromarray(НФА_ИНВ,i);i=i-1;len=len-1;
     fi;
   od;
   CopyArray(aAna,НФА_ИНВ);
   ClearVariable(aAna);
--   for i=1..позиции do
--     addinarray(aAna,true,false,НФА[i]+'&УЧН.'+trim(УчНФА[i]));
--   od;
--   ClearVariable(Array_tmpS);
--   len=LengthOfArray(НФА_ИНВ);
--   ShowProgress(len, "Сверка с карточками НФА данных расчета по проводкам...");
--   for i=1..len do
--     ProgressPos(i);
--     if SearchInArray(aAna,НФА_ИНВ[i],true)<1:addinarray(Array_tmpS,true,false,НФА_ИНВ[i]);fi;
--   od;
--   CopyArray(Array_tmpS,НФА_ИНВ);
--   ClearVariable(Array_tmpS);
--   ClearVariable(aAna);
   len=LengthOfArray(НФА_ИНВ);
   ShowProgress(len, "Добавление ОС ...");

   z=позиции;x=0;
   for i=1..len do
     ProgressPos(i);
     insertframe(позиции,позиции+1);
     НФА_  =ВыделитьСлово(1,НФА_ИНВ[i],'&');
     УчНФА_=ВыделитьСлово(2,НФА_ИНВ[i],'&');
     УчНФА_=trim(SubStr(УчНФА_,5,255));
--     #КАРНОМ #ИНВНОМ #ИМЯНФА #ВЫБДАТ #ВЫБ_ЖО #UPD_DD
       ИмяНФА[позиции]=Name_A(НФА_);
--       Стоим[позиции] =остаток('*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+'}',датафильра_наличие);
       ss='ИНВВЕД.'+НФА_+'.УЧН.'+УчНФА_;
       if Name_A(ss)<>' ':
          ИНВНОМ[позиции]=Name_A(ss);
          rec=Признаквзапись(ss,false);
          if rec<>nil:
             --Ukey[позиции]=RecordToString(rec);
             КАРНОМ[позиции]=Раб.НФА.B01.ПолеПоПризнакуС(ss,'НОМЕРБУМ');

--             =Раб.НФА.B01.ПолеПоПризнакуЧ(ss,'СТОИМ_ОТЧ');

           | true:--x=x+1;
             КАРНОМ[позиции]='НЕТ';
--             ВЫБДАТ[позиции]=
--             trace('строка:'+str(позиции)+'- нет инв карточки');
          fi;
        | true:--x=x+1;
          ИНВНОМ[позиции]='НЕТ';
          КАРНОМ[позиции]='НЕТ';
--        trace('строка:'+str(позиции)+'- нет инв карточки');   +'&'+мосн_усл+'}'
       fi;
       if остаток('*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+if(ВИШН,'&'+мосн_усл,'')+'}',ДатаКП)>0:-- не списано
          if ВИШН:
             if оборот('*.101.??.???|*.102.??.???{ДВИЖ_НФА.П.ВП&'+НФА_ИНВ[i]+'}',ДатаНП,ДатаКП)<>0:--пришло с др. службы
                ВЫБ_ЖО[позиции]='7 приход с др.службы';
              | true:ВЫБ_ЖО[позиции]='';
             fi;
           | true:выб_жо[позиции]='';
          fi;
          --ВЫБДАТ[позиции]=10.10.2010;
        | true:--прошло выбытие
          if ВИШН:
             if остаток('*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+'&'+не_мосн_усл+'}',ДатаКП)>0: -- выбыло в МОСН
                ВЫБ_ЖО[позиции]='7 Расход в др. службу';
              --  ВЫБДАТ[позиции]=10.10.2010;
              | true:ВЫБ_ЖО[позиции]='7';
             fi;
           | true:ВЫБ_ЖО[позиции]='7';
          fi;
          ВЫБДАТ[позиции]=ВзятьДатуПоследнейПроводкиОС('*.101.??.???|*.102.??.???{'+НФА_ИНВ[i]+'}',ДатаНП,ДатаКП);

       fi;

   od;
   CloseProgress;

--   z=позиции-z;
--   if z>0:trace('Добавлено строк:'+str(z));fi;

   len=позиции;
--   ShowProgress(len, "Проверка достоверности");
--   z=0;
--   for i=1..len do
--     ProgressPos(i);
----    НФА[z]=GetFieldS(OWA,i,'НФА');
----    УчНФА[z]=GetFieldS(OWA,i,'ИНВ');
----    ИмяНФА[z]=GetFieldS(OWA,i,'НФА_ИМЯ');
----    ИнвВед[z]=GetFieldS(OWA,i,'ИНВ_ВЕД');
----    Датт[z]=GetFieldD(OWA,i,'ДАТ_ВЭКСП');
----    Стоим[z]=GetFieldN(OWA,i,'СТОИМ_ОТЧ');
----    Ukey[z]=RecordToString(GetRecordKey(OWA,i));
----    if остаток('*.101.??.???|*.102.??.???{'+НФА[z]+'&УЧН.'+trim(УчНФА[z])+'}',датафильра_наличие)<=200000:
----      НФА[z]='';
----      УчНФА[z]='';
----      ИмяНФА[z]='';
----      ИнвВед[z]='';
----      Датт[z]=1.1.100;
----      Стоим[z]=0;
----      Ukey[z]='';
----      z=z-1;
----    fi;

--     nn=остаток('*.101.??.???|*.102.??.???{'+НФА[i]+'&УЧН.'+trim(УчНФА[i])+'}',датафильра_наличие);
--     dd=Раб.НФА.B01.ВзятьДЭКСПЛ(НФА[i],'УЧН.'+УчНФА[i]);
--     ss='';
--     if Датт[i]<>dd:ss='Карточка:'+datetostring(Датт[i])+'<>'+datetostring(dd);fi;
--     if Стоим[i]<>nn:ss=ss+' Карточка:'+str(Стоим[i],2)+'<>'+str(nn);fi;
--     ss=trim(ss);
--     if ss<>'':trace('несоответствие в строке:'+str(i)+' по дате или стоимости '+ss);
--        z=z+1;
--     fi;
--   od;
--   CloseProgress;
   if x>0:
      Trace('Всего ОС без инв карточек='+str(x));
   fi;
   ss='';
   if x>0:ss='Необходимо создать недастающие инвентарные карточки!';fi;
   if z>0:ss=ss+' Необходимо обновить инвентарные карточки!';fi;
   ss=trim(ss);
   if ss<>'':
      trace(ss);
      trace('[СЕРВИС]=>[Создание и обработка инвентарных карточек]');

   fi;

end;

Proc btnOnClick(Sender:String); -- объекты при нажатии
var RUN :Logical;
var nn :Integer;
 if Sender="btnClose"   : Close;
 |  Sender="btnПечать"  : РАБ.НАСТР_ПЕЧАТЬ.Prn("","","RPO_STD_000.cfg","",1);

 |  Sender="btnРасчет"  : Загрузка; Message("Формирование описи инвентарных карточек^Mпо учету основных средств успешно завершено!", mtInformation);
-- |  Sender="btnРасчет"  : if СформироватьОпись(ДатаНП, ДатаКП): Message("Формирование описи инвентарных карточек^Mпо учету основных средств успешно завершено!", mtInformation); fi;
 |  Sender="btnОбновить": RUN=False;
                          if IsBlankOpen(BLNwork):
                            Message("Обнаружен открытый бланк инвентарной карточки.^MЗакройте его!", mtError);
                            Exit;
                          fi;
                          if НеНапомин2=False:
                            nn=Enquiry("Выберите действие...", "Для корректной работы должно быть закрыто^Mокно картотеки (браузер) инвентарной карточки.^MПроверьте и закройте его!", "Отмена;Продолжить;Не напоминать", mtConfirmation);
                            if nn=1: Exit;
                            |  nn=2: RUN=True;
                            |  nn=3: НеНапомин2=True; RUN=True;
                            fi;
                          else
                            RUN=True;
                          fi;
                          if RUN: 
                            if ОбновитьВсеИнвентарныеКарточки:
                              Message("Обновление инвентарных карточек прошло успешно!", mtInformation);
                            fi;
                          fi;
 fi;
end;


КОНЕЦ -- конец бланка
