БланкСШаблоном "Виды движения НФА", Редактор РПО_ДНФА;
2-- Системные объекты --
2Menu_Alt_Enter0:Объект; -- Кнопка "Menu_Alt_Enter"; при нажатии Alt_Enter сробатывает процедура Menu_Alt_Enter_ПриНажатии
		       -- для инициализации требуется выполнить процедуру РАБ.НФА.B01.Ini_Menu_Alt_Enter;
Button1:Объект;
Proc ЗаморозкаОбластиБланка;РАБ.НФА.B02.ЗаморозкаОбластиБланка;end;
Proc РазморозкаОбластиБланка;РАБ.НФА.B02.РазморозкаОбластиБланка;end;
var БланкКОД :s; -- расчитывается при открытии бланка (шаблонпослеоткрытия)
Var SQLver:l;	 -- расчитывается при открытии бланка (шаблонпослеоткрытия)
var CopyClosedModFob:l=ClosedModFob;
ФлCopyClosedModFob:object;
var ИМЯКРТ   :s='РПО_ДНФА';-- Картотека которую редактирует данный бланк
var установили_блокировку:l;
2func UpdateTimeSecCurrent:i;^UpdateTimeSec;end;-- функция обязательная для работы с SQL запросами
2-----------------------
--
var  СтароеЗначениеПриНаборе:s;
РазработчикПоУмолчанию:s=['РПО'];
ФлагОписание:l;
ФлагОписание_:l=не ФлагОписание;
ФлагОписание1:s=if(ФлагОписание,РАБ.НФА.B02.ch_S_Wвыбор_да,РАБ.НФА.B02.ch_S_Wвыбор_пусто);
ФлагОписание2:s='Показывать описание операции';
var NN[]:i=$;
var ВидДОК_:s='';
Секц_Запрос:Секция;
Секц_ДОК:Секция;
ШапкаБланка:секция;
Секц_ОПИСАНИЕ:секция;
ШапкаБланка_:i=1;
--ss=ВзятьПеременнуюС('Позиции['+str(i)+'].'+SubStr(s,1,Length(s)-1));
--if ss<>v:ЗаписатьПеременнуюС('Позиции['+str(i)+'].'+SubStr(s,1,Length(s)-1),v);fi;
var пользователь:s=ВзятьПеременнуюС('УПРАВЛЕНИЕ.УНФА.пользователь');
var Описание_столбцов:s='Описание столбцов в движении НФА ['+ДНФА+'] '+ДНФАИМЯ;
--МаскаПризнаков
--Заголовок[]:s;
--Обязательный[]:l;
--Обязательный_[]:s=if(Запрос[$].Обязательный,'Ц','');
--Остаток1 []:l;
Остаток_ []:s=if(Запрос[$].Остаток ,'Ц','');
Остаток2_[]:s=if(Запрос[$].Остаток2,'Ц','');
Цена_	 []:s=if(Запрос[$].Цена    ,'Ц','');
ДляВсех_ []:s=if(Запрос[$].ДляВсех ,'Ц','');
Скнопкой_[]:s=if(Запрос[$].Скнопкой,'Ц','');
Итоги_	 []:s=if(Запрос[$].Итоги   ,'Ц','');
КБКНФА_  []:s=if(Запрос[$].КБКНФА  ,'Ц','');
СчетНФА_ []:s=if(Запрос[$].СчетНФА ,'Ц','');
СПР_	 []:s=Запрос[$].СПР;
КНСПР:s='';
--ДебКреОбщ []:i;
--ДебКреОбщ_[]:s=if(Запрос[$].ДебКреОбщ=0 :'Общий'
--		  | Запрос[$].ДебКреОбщ=1 :'Дебет'
--		  | Запрос[$].ДебКреОбщ=-1:'Кредит'
--		   );

qqq;
rec:i;
var st[]:s;

--2Proc 0SortSectionF82;
--var s,f:s;
--var x,y:i;
--s=AsString (Шаблон.Имя);
--x=AsInteger(Шаблон.Столбец);
--f=AsString (Шаблон.Поле);
--trace(str(x));
----if s='Секц_Запрос':SortSection(Запрос,3,true);
--if s='Секц_Запрос':SortSection(Секц_Запрос,3,true);
-- | s='ОС':SortSection(ОС,f,true);
--fi;
----message(AsString(Шаблон.Имя));
--2end;
var ForSelect[]:s;
ТП_Уник:i=5;
func Заблокирована:l;
 if ClosedModFob:Beep(16);EditorCancel;Сообщение('Операция заблокирована!'+chr(13)+'Для редактирования записи снимите флажок БЛОКИРОВКА.',mtWarning);

   ^true;
 fi;
 ^false;
end;

2Func ИмяТипаПараметра (I:i):s;
 if i=01:^'НФА' 		  ;
  | i=02:^'Количество'		  ;
  | i=03:^'Сумма'		  ;
  | i=04:^'Цена'		  ;
  | i=05:^'Остаток'		  ;
  | i=06:^'Счет НФА'		  ;
  | i=07:^'КорСчет НФА' 	  ;
  | i=08:^'Счет'		  ;
  | i=09:^'Аналитика'		  ;
  | i=10:^'Число'		  ;
  | i=11:^'Дата'		  ;
  | i=12:^'Счет аморт НФА'	  ;
  | i=13:^'Сумма аморт НФА'	  ;
  | i=14:^'Аналитика ручн ввода'  ;
  | i=15:^'Ед.изм.'  ;
 fi;
 ^'';
2end;
--ТипПараметра[]:i;
ТипПараметра_[]:s=2ИмяТипаПараметра0(Запрос[$].ТипПараметра);
Стиль_[]:s=Запрос[$].Стиль.Наименование;
2Proc ВыборТипаПараметра (F:s;I:i);
var j,k:i;
 ClearVariable(ForSelect);
 for k=1..15 do ForSelect[k]=2ИмяТипаПараметра0(k);od;
 j=Alternate('Выбор типа поля',ForSelect,-1);
 if Запрос[i].ТипПараметра<>j:
   if (j<=ТП_Уник): -- проверка на уникальность типа
     if ПоискВМассиве(Запрос[].ТипПараметра,j)>0:
	 Message('Тип параметра '+ForSelect[j]+' уже используется!');
	 ClearVariable(ForSelect);
	 exit;
     fi;

--     for k=1..Запрос do
--	 if Запрос[k].ТипПараметра=j:
--	   Message('Тип параметра '+ForSelect[j]+' уже используется!');
--	   ClearVariable(ForSelect);
--	   ^false;
--	 fi;
--     od;
--     Запрос[i].НомерПараметра=if(j=ТП_ТМЦ,НП_ТМЦ,0);
--    |true: Запрос[i].НомерПараметра=0;
   fi;
   Запрос[i].ТипПараметра=j;
--   Запрос[i].Остатки=false;
 fi;
 ClearVariable(ForSelect);
2end;

--2Proc ВыборДебКреОбщ (F:s;I:i);
--var j,k:i;
-- if Запрос[i].ТипПараметра<=ТП_Уник:if Запрос[i].ДебКреОбщ<>0:Запрос[i].ДебКреОбщ=0;fi;exit;fi;
-- ClearVariable(ForSelect);
-- ForSelect[1]='Кредит';
-- ForSelect[2]='Общий';
-- ForSelect[3]='Дебет';
-- j=Alternate('Выбор типа поля',ForSelect,-1);
-- if j>0:if Запрос[i].ДебКреОбщ<>j-2:Запрос[i].ДебКреОбщ=j-2;fi;fi;
--2end;
func ВыборПоляСчета:s;
  var i,j:i;
    ClearVariable(ForSelect);
    for j=1..Запрос do
      if pos('СЧ',UP(Запрос[j].ПолеПодтаблицы))>0:
	 i=ВставитьВмассивСорт(ForSelect,Запрос[j].ПолеПодтаблицы);
      fi;
    od;
    j=Alternate('Выбор поля подтаблицы',ForSelect,-1);
    ^ForSelect[j];
end;
2Proc ВыборПолеПодтаблицы(I:i);
var j:i;

 if Запрос[i].ТипПараметра= 1:Запрос[i].ПолеПодтаблицы='НФА';
  | Запрос[i].ТипПараметра= 2:Запрос[i].ПолеПодтаблицы='КолНФА';
  | Запрос[i].ТипПараметра= 3:Запрос[i].ПолеПодтаблицы='СумНФА';
  | Запрос[i].ТипПараметра= 4:Запрос[i].ПолеПодтаблицы='';-- цена
  | Запрос[i].ТипПараметра=15:Запрос[i].ПолеПодтаблицы='';-- ед.изм
  | Запрос[i].ТипПараметра= 5:Запрос[i].ПолеПодтаблицы='ОстНФА';
  | Запрос[i].ТипПараметра= 6:Запрос[i].ПолеПодтаблицы='СчНФА';
  | Запрос[i].ТипПараметра= 7:Запрос[i].ПолеПодтаблицы='КорСчНФА';

  | Запрос[i].ТипПараметра= 8:
    ClearVariable(ForSelect);
    for j=1..9 do ForSelect[j]='СЧ0'+str(j);od;
    for j=10..11 do ForSelect[j]='СЧ'+str(j);od;
    for j=1..ДлинаМассива(ForSelect) do if ПоискВМассиве(Запрос[].ПолеПодтаблицы,ForSelect[j])>0:УдалитьИзМассива(ForSelect,j);j=j-1;fi;od;
    j=Alternate('Выбор поля подтаблицы',ForSelect,-1);
    if j>0 и Запрос[i].ПолеПодтаблицы<>ForSelect[j]:Запрос[i].ПолеПодтаблицы=ForSelect[j];fi;
  | Запрос[i].ТипПараметра= 9 или Запрос[i].ТипПараметра=14:
    ClearVariable(ForSelect);
    for j=1..9 do ForSelect[j]='АН0'+str(j);od;for j=10..25 do ForSelect[j]='АН'+str(j);od;
    for j=1..ДлинаМассива(ForSelect) do if ПоискВМассиве(Запрос[].ПолеПодтаблицы,ForSelect[j])>0:УдалитьИзМассива(ForSelect,j);j=j-1;fi;od;
    j=Alternate('Выбор поля подтаблицы',ForSelect,-1);
    if j>0 и Запрос[i].ПолеПодтаблицы<>ForSelect[j]:Запрос[i].ПолеПодтаблицы=ForSelect[j];fi;

  | Запрос[i].ТипПараметра=10:
    ClearVariable(ForSelect);
    for j=1..5 do ForSelect[j]='Ч0'+str(j);od;
    for j=1..ДлинаМассива(ForSelect) do if ПоискВМассиве(Запрос[].ПолеПодтаблицы,ForSelect[j])>0:УдалитьИзМассива(ForSelect,j);j=j-1;fi;od;
    j=Alternate('Выбор поля подтаблицы',ForSelect,-1);
    if j>0 и Запрос[i].ПолеПодтаблицы<>ForSelect[j]:Запрос[i].ПолеПодтаблицы=ForSelect[j];fi;
  | Запрос[i].ТипПараметра=11:
    ClearVariable(ForSelect);
    for j=1..5 do ForSelect[j]='Д0'+str(j);od;
    for j=1..ДлинаМассива(ForSelect) do if ПоискВМассиве(Запрос[].ПолеПодтаблицы,ForSelect[j])>0:УдалитьИзМассива(ForSelect,j);j=j-1;fi;od;
    j=Alternate('Выбор поля подтаблицы',ForSelect,-1);
    if j>0 и Запрос[i].ПолеПодтаблицы<>ForSelect[j]:Запрос[i].ПолеПодтаблицы=ForSelect[j];fi;
  | Запрос[i].ТипПараметра=12:Запрос[i].ПолеПодтаблицы='АмСчНФА';
  | Запрос[i].ТипПараметра=13:Запрос[i].ПолеПодтаблицы='АмСумНФА';

 fi;
2end;

2Func ВыборФормата (F:s;I:i):s;
var j,k:i;
 j=Запрос[i].ТипПараметра;
 ClearVariable(ForSelect);
 if j=2 or j=3 or j=4 or j=5 or j=10 or j=10:
    ForSelect[1]=',##0.######;;0';
    ForSelect[2]=',##0.00;;0';
    ForSelect[3]=',##0.00####;;0';
    ForSelect[4]=',##0;;0';
  | j=11:
    ForSelect[1]='dddd dd mmmm yyyy г.';
    ForSelect[2]='dd mmmm yyyy';
    ForSelect[3]='dd/mm/yyyy';
    ForSelect[4]='dd/mm/yy';
 fi;
 j=Alternate('Выбор формата поля',ForSelect,-1);
 if j>0:^ForSelect[j];fi;
 ^'';
2end;

2Func 0ФорматНомПроводки2 (0ss2:s):s;
  if ss='д':ss=ss+' - по дебету';
   | ss='к':ss=ss+' - по кредиту';
   | ss='о':ss=ss+' - общий';
   | ss='0':ss=ss+' - не нулевое кол и сум в проводке';
   | true  :ss='- - нет';
  fi;
  ^ss;
2end;

2Func Выбор0НомПроводки2 (0s2:s):s;
var j,k:i;
var ss,sl,sr,ns:s;
  ClearVariable(ForSelect);
  for k=1..9 do
   ns=str(k);
   j=pos(ns,s);
   if j>0:ss=ФорматНомПроводки(SubStr(s,j+1,1)); else ss=ФорматНомПроводки('-');fi;
   ForSelect[k]=ns+ss;
  od;

--  ForSelect[2]='2'+ss;
--  ForSelect[3]='3'+ss;
--  ForSelect[4]='4'+ss;
--  ForSelect[5]='5'+ss;
--  ForSelect[6]='6'+ss;
--  ForSelect[7]='7'+ss;
--  ForSelect[8]='8'+ss;
--  ForSelect[9]='9'+ss;
  j=Alternate('Выбор принадлежности к проводке',ForSelect,-1);
  if j>0:
    for k=1..j-1 do sl=sl+SubStr(ForSelect[k],1,2);od;
    for k=j+1..9 do sr=sr+SubStr(ForSelect[k],1,2);od;
    ss=ForSelect[j];
    ClearVariable(ForSelect);
    ForSelect[1]=ФорматНомПроводки('д');
    ForSelect[2]=ФорматНомПроводки('к');
    ForSelect[3]=ФорматНомПроводки('о');
    ForSelect[4]=ФорматНомПроводки('0');
    ForSelect[5]=ФорматНомПроводки('-');
    k=Alternate(ss,ForSelect,-1);
    if k>0: ss=str(j)+SubStr(ForSelect[k],1,1);
     | true:ss=SubStr(ss,1,2);
    fi;
   | true:for k=1..9 do sl=sl+SubStr(ForSelect[k],1,2);od;^sl;
  fi;
 ^sl+ss+sr;
2end;

func ВзятьНомерСтрокиСПР(ss:s):i;
var t:i;
 for t=1..ЗАПРОС do
  if ЗАПРОС[t].СПР=ss:^t;fi;
 od;
 ^0;
end;

-- if Запрос[i].ТипПараметра= 1:Запрос[i].ПолеПодтаблицы='НФА';
--  | Запрос[i].ТипПараметра= 4:Запрос[i].ПолеПодтаблицы='';-- цена
--  | Запрос[i].ТипПараметра=15:Запрос[i].ПолеПодтаблицы='';-- ед.изм
--  | Запрос[i].ТипПараметра= 2:Запрос[i].ПолеПодтаблицы='КолНФА';
--  | Запрос[i].ТипПараметра= 3:Запрос[i].ПолеПодтаблицы='СумНФА';
--  | Запрос[i].ТипПараметра= 5:Запрос[i].ПолеПодтаблицы='ОстНФА';
--  | Запрос[i].ТипПараметра=10:
--  | Запрос[i].ТипПараметра=12:Запрос[i].ПолеПодтаблицы='АмСчНФА';
--  | Запрос[i].ТипПараметра=13:Запрос[i].ПолеПодтаблицы='АмСумНФА';

func ВзятьПервыйНомерСтроки(ИскомыйТипПараметра:i):i;
var t:i;
 for t=1..ЗАПРОС do
  if Запрос[t].ТипПараметра=ИскомыйТипПараметра:^t;fi;
 od;
 ^0;
end;

Func ПроставитьИтогиДляСумм:l;
var t,z:i;
var ll:l;
ll=false;
 for t=1..ЗАПРОС do
  z=Запрос[t].ТипПараметра;
  if z=2 or z=3 or z=5 or z=10 or z=12 or z=13:
     if ЗАПРОС[t].ИТОГИ=false:
	ЗАПРОС[t].ИТОГИ=true;
	ll=true;
     fi;
  fi;
 od;
 ^ll;
end;

Func Замена_ПГР_на_ДОК:l;
var t,z:i;
var ll:l;
 z=ВзятьНомерСтрокиСПР('ДОК');
 if z>0:message('Справочник ДОК уже определен!');^false;fi;
 z=ВзятьНомерСтрокиСПР('ПГР');
 if z<1:message('Справочник ПГР не найден!');^false;fi;
 ll=true;
 if соотв(ДНФА,'ПРИХ.*'):
    ЗАПРОС[z].ЗАГОЛОВОК='Прих АРМ';
    ЗАПРОС[z].ОТВЕТ='ДОК.????.П.*';
    ЗАПРОС[z].ПОДСКАЗКА='Прих АРМ';
  | true:
    ЗАПРОС[z].ЗАГОЛОВОК='Расх АРМ';
    ЗАПРОС[z].ОТВЕТ='ДОК.????.Р.*';
    ЗАПРОС[z].ПОДСКАЗКА='Расх АРМ';
 fi;

 ЗАПРОС[z].ОБЯЗАТЕЛЬНЫЙ='';
 ЗАПРОС[z].НЕОБЯЗАТЕЛЬНЫЙ='*';
 ЗАПРОС[z].ОСТАТОК=false;
 ЗАПРОС[z].ЦЕНА=false;
 ЗАПРОС[z].ДЛЯВСЕХ=true;
 ЗАПРОС[z].СКНОПКОЙ=false;
 ЗАПРОС[z].ИТОГИ=false;

 ЗАПРОС[z].КБКНФА =false;
 ЗАПРОС[z].СЧЕТНФА=false;

 ЗАПРОС[z].КБКОТСЧЕТА='';
 ЗАПРОС[z].АНОТСЧЕТА ='';

 ЗАПРОС[z].СПР='ДОК';
 ЗАПРОС[z].ВИД1='код';
 ЗАПРОС[z].ВИД2='наименование';
 ЗАПРОС[z].ВИД3='';
 ЗАПРОС[z].Ш1=250;
 ЗАПРОС[z].Ш2=350;
 ЗАПРОС[z].Ш3=0;

--    ЗАГОЛОВОК      :STRING;
--    ОТВЕТ	     :STRING;
--    ТИППАРАМЕТРА   :INTEGER;
--    ПОЛЕПОДТАБЛИЦЫ :STRING;
--    ДЕБКРЕОБЩ      :INTEGER; --0=общая;1=по дебету;-1=по кредиту
--    ОБЯЗАТЕЛЬНЫЙ   :STRING;
--    НЕОБЯЗАТЕЛЬНЫЙ :STRING;
--    ОСТАТОК	     :BOOLEAN;
--    ЦЕНА	     :BOOLEAN;
--    ДЛЯВСЕХ	     :BOOLEAN;
--    СКНОПКОЙ	     :BOOLEAN;
--    ИТОГИ	     :BOOLEAN;
--    НОМПРОВОДКИ    :STRING(18);
--    СТИЛЬ	     :РПО_СТИЛЬ;
--    ВИД1	     :STRING;
--    ВИД2	     :STRING;
--    ВИД3	     :STRING;
--    Ш1	     :INTEGER;
--    Ш2	     :INTEGER;
--    Ш3	     :INTEGER;
--    Ф1	     :STRING;
--    Ф2	     :STRING;
--    Ф3	     :STRING;
--    ПОДСКАЗКА      :STRING;
--    КБКНФА	     :BOOLEAN;
--    СЧЕТНФА	     :BOOLEAN;
--    ОТВЕТКАРТ      :STRING;
--    КБКОТСЧЕТА     :STRING; --параметр для типа счет
--    АНОТСЧЕТА      :STRING; --параметр для типа аналитика(накладывает доп фильтр на выбор аналитики по структуре учета для выбранного счета)
--    СПР	     :STRING; --параметр для типа аналитика (для обработки на скрытие столбцов при соответствии НеДействСпр)
--    ПОМОЩЬ1	     :STRING;
--    ПОМОЩЬ2	     :STRING;
--    СВЕРТКА	     :BOOLEAN; --параметр учавствует в свертке проводок для ПОЗИЦИИ_БУХ
--    СВЕРТКАЗАМЕНА  :STRING; --условие замены параметра для свертки маскаусловия1=масказамены1|маскаусловия2=масказамены2|маскаусловия3=масказамены3|...
--    ОСТАТОК2	     :BOOLEAN;
--    УСЛОСТ2	     :STRING;



-- ЗАПРОС
-- СПР

 ^ll;
end;

Func Добавить_ед_изм:l;
var z:i;
var ll:l;
  if ВзятьПервыйНомерСтроки(15)>0:^false;fi;
  z=ВзятьПервыйНомерСтроки(5);-- строка с остатками
  if z<1:
     z=ВзятьПервыйНомерСтроки(1);-- строка с НФА
  fi;
  if z<1:^false;fi;
  insertframe(ЗАПРОС,z+1);
 z=z+1;
 ll=true;
 Запрос[z].ТипПараметра=15;
 Запрос[z].Стиль={9};

 ЗАПРОС[z].ЗАГОЛОВОК='Ед';
 ЗАПРОС[z].ОТВЕТ='';
 ЗАПРОС[z].ПОДСКАЗКА='ед.изм/точность';

 ЗАПРОС[z].ОБЯЗАТЕЛЬНЫЙ='*';
-- ЗАПРОС[z].НЕОБЯЗАТЕЛЬНЫЙ='';
-- ЗАПРОС[z].ОСТАТОК=false;
-- ЗАПРОС[z].ЦЕНА=false;
-- ЗАПРОС[z].ДЛЯВСЕХ=false;
-- ЗАПРОС[z].СКНОПКОЙ=false;
-- ЗАПРОС[z].ИТОГИ=false;

-- ЗАПРОС[z].КБКНФА =false;
-- ЗАПРОС[z].СЧЕТНФА=false;

-- ЗАПРОС[z].КБКОТСЧЕТА='';
-- ЗАПРОС[z].АНОТСЧЕТА ='';

-- ЗАПРОС[z].СПР='';
 ЗАПРОС[z].ВИД1='ед';
 ЗАПРОС[z].ВИД2='точ';
 ЗАПРОС[z].ВИД3='';
 ЗАПРОС[z].Ш1=100;
 ЗАПРОС[z].Ш2=100;
 ЗАПРОС[z].Ш3=0;
 ^ll;
end;
Func КТ_в_приходе_в_таблицу:l;
var z:i;
var ll:l;
ll=false;
 if соотв(ДНФА,'ПРИХ.*'):
   z=ВзятьНомерСтрокиСПР('КТ');
   if z>0:
      if ЗАПРОС[z].ДЛЯВСЕХ=true:
	 ЗАПРОС[z].ДЛЯВСЕХ=false;
	 ll=true;
      fi;
      if ЗАПРОС[z].СКНОПКОЙ=false:
	 ЗАПРОС[z].СКНОПКОЙ=true;
	 ll=true;
      fi;
   fi;
 fi;
^ll;
end;

Проц Кнопка1_ПриНажатии(Отправитель: Строка);
var ll:l;
 ll=Замена_ПГР_на_ДОК;
end;


Проц Кнопка2_ПриНажатии(Отправитель: Строка);
var ll:l;
 ll=ПроставитьИтогиДляСумм;
end;


Проц Кнопка3_ПриНажатии(Отправитель: Строка);
var ll:l;
 ll=Добавить_ед_изм;
end;

Проц Кнопка4_ПриНажатии(Отправитель: Строка);
var ll:l;
 ll=КТ_в_приходе_в_таблицу;
end;

func Кнопка1234_ПриНажатии:l;
var ll:l;
-- ll=ПроставитьИтогиДляСумм or Добавить_ед_изм or КТ_в_приходе_в_таблицу or Замена_ПГР_на_ДОК;
 ll=ПроставитьИтогиДляСумм or Добавить_ед_изм;
 ^ll;
end;

func ПриВходе(s:s;i:i):l;
var wa,wa1,nrec:i;
var ss:s;
var rec:record;
 if Заблокирована:^false;fi;

  if s='Остаток_'      :Запрос[i].Остаток =не Запрос[i].Остаток      ;^false;
   | s='Остаток2_'     :Запрос[i].Остаток2=не Запрос[i].Остаток2     ;^false;
   | s='Цена_'	       :Запрос[i].Цена	  =не Запрос[i].Цена	     ;^false;
   | s='ДляВсех_'      :Запрос[i].ДляВсех =не Запрос[i].ДляВсех      ;^false;
   | s='Скнопкой_'     :Запрос[i].Скнопкой=не Запрос[i].Скнопкой     ;^false;
   | s='Итоги_'        :Запрос[i].Итоги   =не Запрос[i].Итоги	     ;^false;
   | s='ТипПараметра_' :ВыборТипаПараметра(s,i) 		     ;^false;
   | s='ВидДОК.Признак':rec=OpenCardFile('РПО_ВидДОК','',ДОК[i].ВидДОК);
     if rec<>NIL:ДОК[i].ВидДОК=rec;fi;
     if ДОК[i].ПРИЗНАК<>'ВИДДОК.'+ДОК[i].ВидДОК.ПРИЗНАК:ДОК[i].ПРИЗНАК='ВИДДОК.'+ДОК[i].ВидДОК.ПРИЗНАК;fi;
     ^false;
   | s='ВидДОК_'       :ss=ВыборПризнака('ВИДДОК.*'); 
     if ss<>'':
       if 'ВИДДОК.'+РАБ.НФА.B01.ПолеПоПризнакуС(ss,'ПРИЗНАК')=ss:
	  ДОК[i].ПРИЗНАК=ss;ДОК[i].ВидДОК=SignToRecord(ss,false);
       fi;
     fi;
     ^false;
   | s='КБКНФА_'       :
     if pos('СЧЕТ',Up(ТипПараметра_[i]))>0:Запрос[i].КБКНФА=не Запрос[i].КБКНФА;
      | true: message('Условие отбора (взять с КБК от счета НФА)'+chr(13)+
		      'работает только с типом параметра,связанным со счетом'
		      ,тсПредупреждение
		     );
     fi;
     ^false;
   | s='КБКОТСЧЕТА'	  :
     if pos('СЧЕТ',Up(ТипПараметра_[i]))>0:
	Запрос[i].КБКОТСЧЕТА=ВыборПоляСчета;
      | true: message('Условие отбора (КБК от счета)'+chr(13)+
		      'работает только с типом параметра,связанным со счетом'
		      ,тсПредупреждение
		     );
     fi;
     ^false;
   | s='АНОТСЧЕТА'	 :
     if pos('АНАЛИТИКА',Up(ТипПараметра_[i]))>0 or pos('НФА',Up(ТипПараметра_[i]))=1:
	Запрос[i].АНОТСЧЕТА=ВыборПоляСчета;
      | pos('СЧЕТ',Up(ТипПараметра_[i]))>0 :Запрос[i].АНОТСЧЕТА=if(Запрос[i].АНОТСЧЕТА='Соответствие НФА','','Соответствие НФА');
      | true: 
      message('Условие отбора (Аналитика по структуре для счета)'+chr(13)+
		      'работает только с типом параметра АНАЛИТИКА'
		      ,тсПредупреждение
		     );
     fi;
     ^false;
   | s='СчетНФА_'	:
     if pos('СЧЕТ',Up(ТипПараметра_[i]))>0 or pos('АНАЛИТИКА',Up(ТипПараметра_[i]))>0:Запрос[i].СчетНФА=не Запрос[i].СчетНФА;
      | true: message('Условие отбора (взять счет от счета НФА)'+chr(13)+
		      'работает только с типом параметра,связанным со счетом'
		      ,тсПредупреждение
		     );
     fi;
     ^false;
   | s='СПР_'	    :
     if pos('АНАЛИТИКА',Up(ТипПараметра_[i]))>0:Запрос[i].СПР=ВыборПризнака('*',true);
      | true: message('Условие отбора (Настраиваемый справочник)^Mработает только с типом параметра АНАЛИТИКА'
		      ,тсПредупреждение
		     );
     fi;
     ^false;
   | s='КНСПР'	     :
     if pos('АНАЛИТИКА',Up(ТипПараметра_[i]))>0:
	if pos('.',Запрос[i].Ответ)=pos('.*',Запрос[i].Ответ):
	   wa=pos('.',Запрос[i].Ответ);
	   if wa>1:Запрос[i].СПР=SubStr(Запрос[i].Ответ,1,wa-1);fi;
	 | true: if pos('|',Запрос[i].Ответ)<1 and pos('&',Запрос[i].Ответ)<1 and pos('~',Запрос[i].Ответ)<1: -- отбор по справочнику без наворотов
		    if pos('*',Запрос[i].Ответ)<>1 and pos('?',Запрос[i].Ответ)<>1:
		      wa=pos('.',Запрос[i].Ответ);
		      if wa>1:Запрос[i].СПР=SubStr(Запрос[i].Ответ,1,wa-1);fi;
		    fi;
		 fi;
	fi;

      | true: message('Условие отбора (Настраиваемый справочник)^Mработает только с типом параметра АНАЛИТИКА'
		      ,тсПредупреждение
		     );
     fi;
     ^false;

--   | s='ДебКреОбщ_'	 :ВыборДебКреОбщ(s,i)			       ;^false;
   | s='ПолеПодтаблицы':ВыборПолеПодтаблицы(i)			     ;^false;
   | s='НомПроводки'   :Запрос[i].НомПроводки=ВыборНомПроводки(Запрос[i].НомПроводки);^false;
--   СтароеЗначениеПриНаборе=Запрос[i].НомПроводки;^true;
   | s='ФлагОписание1' or s='ФлагОписание2':ФлагОписание=not ФлагОписание;Секц_ОПИСАНИЕ.visible=ФлагОписание;^false;
   | s='NN'   :
     rec = ОткрытьКартотеку("РПО_ДНФА", "", nil, crdAnyRecord);
     if rec=nil:^false;fi;
     wa=OpenWorkArea('РПО_ДНФА','','ukey='+RecordToString(rec));
     nrec=ВзятьНомерЗаписи(wa,rec);
     wa1=OpenArray(wa,nrec,'Запрос','');
     try
      BeginChanging(wa1,false);
       try
	nrec = ВставитьЗапись(wa1);
   nrec=ЗаписатьПолеС(wa1,nrec,'ЗАГОЛОВОК'     ,Запрос[i].ЗАГОЛОВОК	 );
   nrec=ЗаписатьПолеС(wa1,nrec,'ОТВЕТ'	       ,Запрос[i].ОТВЕТ 	 );
   nrec=ЗаписатьПолеЦ(wa1,nrec,'ТИППАРАМЕТРА'  ,Запрос[i].ТИППАРАМЕТРА	 );
   nrec=ЗаписатьПолеС(wa1,nrec,'ПОЛЕПОДТАБЛИЦЫ',Запрос[i].ПОЛЕПОДТАБЛИЦЫ );
   nrec=ЗаписатьПолеЦ(wa1,nrec,'ДЕБКРЕОБЩ'     ,Запрос[i].ДЕБКРЕОБЩ	 );
   nrec=ЗаписатьПолеС(wa1,nrec,'ОБЯЗАТЕЛЬНЫЙ'  ,Запрос[i].ОБЯЗАТЕЛЬНЫЙ	 );
   nrec=ЗаписатьПолеС(wa1,nrec,'НЕОБЯЗАТЕЛЬНЫЙ',Запрос[i].НЕОБЯЗАТЕЛЬНЫЙ );
   nrec=ЗаписатьПолеЛ(wa1,nrec,'ОСТАТОК'       ,Запрос[i].ОСТАТОК	 );
   nrec=ЗаписатьПолеЛ(wa1,nrec,'ЦЕНА'	       ,Запрос[i].ЦЕНА		 );
   nrec=ЗаписатьПолеЛ(wa1,nrec,'ДЛЯВСЕХ'       ,Запрос[i].ДЛЯВСЕХ	 );
   nrec=ЗаписатьПолеЛ(wa1,nrec,'СКНОПКОЙ'      ,Запрос[i].СКНОПКОЙ	 );
   nrec=ЗаписатьПолеЛ(wa1,nrec,'ИТОГИ'	       ,Запрос[i].ИТОГИ 	 );
   nrec=ЗаписатьПолеС(wa1,nrec,'НОМПРОВОДКИ'   ,Запрос[i].НОМПРОВОДКИ	 );
   nrec=ЗаписатьПолеЗ(wa1,nrec,'СТИЛЬ'	       ,Запрос[i].СТИЛЬ 	 );
   nrec=ЗаписатьПолеС(wa1,nrec,'ВИД1'	       ,Запрос[i].ВИД1		 );
   nrec=ЗаписатьПолеС(wa1,nrec,'ВИД2'	       ,Запрос[i].ВИД2		 );
   nrec=ЗаписатьПолеС(wa1,nrec,'ВИД3'	       ,Запрос[i].ВИД3		 );
   nrec=ЗаписатьПолеЦ(wa1,nrec,'Ш1'	       ,Запрос[i].Ш1		 );
   nrec=ЗаписатьПолеЦ(wa1,nrec,'Ш2'	       ,Запрос[i].Ш2		 );
   nrec=ЗаписатьПолеЦ(wa1,nrec,'Ш3'	       ,Запрос[i].Ш3		 );
   nrec=ЗаписатьПолеС(wa1,nrec,'Ф1'	       ,Запрос[i].Ф1		 );
   nrec=ЗаписатьПолеС(wa1,nrec,'Ф2'	       ,Запрос[i].Ф2		 );
   nrec=ЗаписатьПолеС(wa1,nrec,'Ф3'	       ,Запрос[i].Ф3		 );
   nrec=ЗаписатьПолеС(wa1,nrec,'ПОДСКАЗКА'     ,Запрос[i].ПОДСКАЗКА	 );
   nrec=ЗаписатьПолеЛ(wa1,nrec,'КБКНФА'        ,Запрос[i].КБКНФА	 );
   nrec=ЗаписатьПолеЛ(wa1,nrec,'СЧЕТНФА'       ,Запрос[i].СЧЕТНФА	 );
   nrec=ЗаписатьПолеС(wa1,nrec,'ОТВЕТКАРТ'     ,Запрос[i].ОТВЕТКАРТ	 );
   nrec=ЗаписатьПолеС(wa1,nrec,'КБКОТСЧЕТА'    ,Запрос[i].КБКОТСЧЕТА	 );
   nrec=ЗаписатьПолеС(wa1,nrec,'АНОТСЧЕТА'     ,Запрос[i].АНОТСЧЕТА	 );
	EndChanging(wa1);
       Except
	CancelChanging(wa1);
       end;
     Finally
     end;
     CloseWorkArea(wa1);
     CloseWorkArea(wa);
  fi;
^true;
end;
func ПриОбзоре(Сек:s;y:i;x:i;v:s):s;
var s:s;
var i,ii:i;
s=AsString (Шаблон.Поле);
i=AsInteger(Шаблон.Кадр);
if s='ф1' or s='ф2' or s='ф3':^ВыборФормата(s,i);
 | s='Ответ':
   ClearVariable(st);
   st[1]='КОП -- для расчета копеек от (цены НФА)*количество';
   st[2]='ОСТ_ОС -- для расчета остаточной стоимости ОС (стоимость-амортизация)';
   st[3]='ОСТ_ОС_ДО_10001 -- для доначисления амортизации до 100% для ОС <10001 руб';
   st[4]='ОС_ДО_10001 -- копия стоимости, если ОС <10001 руб';
   st[5]='ОС_ДО_1001 -- копия стоимости, если ОС <1001 руб';
   st[6]='АМ_ПРОШЛЫХ_ПЕРИОДОВ -- остаток амортизации на 01,01';
   st[7]='АМ_ТЕКУЩЕГО_ПЕРИОДА -- оборот амортизации с 01,01 по текущую дату';
   ii=Alternate('Параметр для авторасчета суммы по...',st,-1);
   if ii>0:^SubStr(st[ii],1,pos(' ',st[ii])-1);
   fi;
   ^'';
 | true:^'';
fi;
end;

--func ПриНаборе(Сек:s;y:i;x:i;ch:i;v:s): Строка;
--var s:s;
--var i:i;
--var ch_true,ss:s;
--  s=AsString (Шаблон.Поле);
--  i=AsInteger(Шаблон.Кадр);
--  if ch<>13:
--   ss=chr(ch);
--   if s='НомПроводки':
--    ch_true='123456789';
--    if pos(ss,ch_true)>0:СтароеЗначениеПриНаборе=v;^v;fi;
--    ^СтароеЗначениеПриНаборе;
--   fi;
--  fi;
--  Шаблон.СкрытьРедактор(true);
--end;

func ПриПроверкеС(s:s;i:i;v:s):l;
^true;
end;
func ПриПроверкеЦ(s:s;i:i;v:i):l;
^true;
end;
func ПриПроверкеЧ(s:s;i:i;v:n):l;
^true;
end;
func ПриПроверкеЛ(s:s;i:i;v:l):l;
^true;
end;
func ПриПроверкеД(s:s;i:i;v:d):l;
^true;
end;

--2ВыборФормата
--func ПриВходе1(s:s;i:i):l;
-- var ii,j:i;
-- var ss:s;

--  ClearVariable(st);
--  st[1]='1. Приход';
--  st[2]='2. Расход (передача в др. организацию или физлицу)';
--  st[3]='3. Внутреннее перемещение';
--  st[4]='4. Списание';
--  if pos('МАТ',s)=1:
--    ii=Alternate('Операции для материалов',st,-1);
--    if ii=0:^false;fi;
--    if ii=1:МАТ[i].ДНФА=ВыборПризнака('ДНФА.ПРИХ.*');
--     | ii=2:МАТ[i].ДНФА=ВыборПризнака('ДНФА.РАСХ.ПЕР*');
--     | ii=3:МАТ[i].ДНФА=ВыборПризнака('ДНФА.ВНПР.*');
--     | ii=4:МАТ[i].ДНФА=ВыборПризнака('ДНФА.РАСХ.*&~ДНФА.РАСХ.ПЕР*');
--     | true:^true;
--    fi;
--   | pos('МБП',s)=1:
--    ii=Alternate('Операции для МБП',st,-1);
--    if ii=0:^false;fi;
--    if ii=1:МБП[i].ДНФА=ВыборПризнака('ДНФА.ПРИХ.*');
--     | ii=2:МБП[i].ДНФА=ВыборПризнака('ДНФА.РАСХ.ПЕР*');
--     | ii=3:МБП[i].ДНФА=ВыборПризнака('ДНФА.ВНПР.*');
--     | ii=4:МБП[i].ДНФА=ВыборПризнака('ДНФА.РАСХ.*&~ДНФА.РАСХ.ПЕР');
--     | true:^true;
--    fi;
--   | pos('ОС',s)=1:
--    ii=Alternate('Операции для ОС',st,-1);
--    if ii=0:^false;fi;
--    if ii=1:ОС [i].ДНФА=ВыборПризнака('ДНФА.ПРИХ.*');
--     | ii=2:ОС [i].ДНФА=ВыборПризнака('ДНФА.РАСХ.ПЕР*');
--     | ii=3:ОС [i].ДНФА=ВыборПризнака('ДНФА.ВНПР.*');
--     | ii=4:ОС [i].ДНФА=ВыборПризнака('ДНФА.РАСХ.*&~ДНФА.РАСХ.ПЕР');
--     | true:^true;
--    fi;

--   | s='допинф':ClearVariable(st);
--     st[1]='НЕТ - Не используя дополнительных столбцов (Куда или откуда)';
--     st[2]='ДА  - Используя дополнительные столбцы (Куда или откуда)';
--     ii=Alternate('Выбор режима использования дополнительных столбцов',st,-1);
--     if ii=0:^false;fi;
--     j=КакЦелое(Шаблон.Столбец);
--     Шаблон.Столбец=j-6;
--     ss=КакСтрока(Шаблон.Поле);
--     if Соотв(ss,'МАТ*'):МАТ[i].допинф=if(ii=1,false,true);
--	| Соотв(ss,'МБП*'):МБП[i].допинф=if(ii=1,false,true);
--	| Соотв(ss,'ОС*' ):ОС [i].допинф=if(ii=1,false,true);
--     fi;
--     Шаблон.Столбец=j+6;

--   | true:^true;
--  fi;
--^false;
--end;



proc ПриНажатии(s:s);
--z='';
-- if s='КнПлюс' :if ll:ВставитьЗаписьРОМ(ТекущСекц);else message(msg);fi;
--  | s='КнМинус':if ll:УдалитьЗаписьРОМ(ТекущСекц) ;else message(msg);fi;
--  | true:exit;
-- fi;
end;
-- ClearVariable(ForSelect);
-- for k=1..13 do ForSelect[k]=2ИмяТипаПараметра0(k);od;
-- j=Alternate('Выбор типа поля',ForSelect,-1);
-- if Запрос[i].ТипПараметра<>j:
--   if (j<=ТП_Уник): -- проверка на уникальность типа
--     if ПоискВМассиве(Запрос[].ТипПараметра,j)>0:
--	   Message('Тип параметра '+ForSelect[j]+' уже используется!');
--	   ClearVariable(ForSelect);
--	   exit;
--     fi;
2Func0 УдалитьПризнакИзНабора (СтрокаАн:S; Разделитель1:S;АнКудалению:S):S;
var n,nn,len:i;
 if СтрокаАн="": ^""; fi;
 Разделитель1=up(Разделитель1);
 СтрокаАн=up(Разделитель1+СтрокаАн+Разделитель1);
-- СтрокаАн=up(СтрокаАн+Разделитель1);
 АнКудалению=up(Разделитель1+АнКудалению+Разделитель1);
 len=length(АнКудалению);
 n=pos(АнКудалению,СтрокаАн);
 while n>0 do СтрокаАн=Удалить(СтрокаАн,n+1,len-1);n=pos(АнКудалению,СтрокаАн); od;
 len=length(Разделитель1);
 nn =length(СтрокаАн);
 if SubStr(СтрокаАн,nn-len+1,len)=Разделитель1:
 СтрокаАн=Удалить(СтрокаАн,nn-len+1,len);
 fi;
 if pos(Разделитель1,СтрокаАн)=1:СтрокаАн=Удалить(СтрокаАн,1,len);fi;
-- if Удалить(СтрокаАн,1,length(СтрокаАн)-len)=Разделитель1:СтрокаАн=Удалить(СтрокаАн,length(СтрокаАн)-len,len);fi;

 ^СтрокаАн;
2End0;

proc КопирНеДействСпр;
var i,p,wa,rs:i;
var ss:s;
 ss=ВыборПризнака("ДНФА.*",false,true);
 if Длина(ss)>5:ss=SubStr(ss,6,255)+'*';
  | true:exit;
 fi;
 ClearVariable(ForSelect);
 wa=OpenWorkArea('РПО_ДНФА','','ukey<>'+RecordToString(current)+' and СООТВ(ДНФА,"'+ss+'")');
     rs=Записей(wa);
     for i=1..rs do
	 try
	  BeginChanging(wa,false);
	   try
	     p=ЗаписатьПолеС(wa,i,'НеДействСпр',НеДействСпр);
	    EndChanging(wa);
	   Except
	    CancelChanging(wa);
	   end;
	 Finally
	 end;
     od;
     CloseWorkArea(wa);
end;
proc КопирНеДействОст;
var i,p,wa,rs:i;
var ss:s;
 ss=ВыборПризнака("ДНФА.*",false,true);
 if Длина(ss)>5:ss=SubStr(ss,6,255)+'*';
  | true:exit;
 fi;
 ClearVariable(ForSelect);
 wa=OpenWorkArea('РПО_ДНФА','','ukey<>'+RecordToString(current)+' and СООТВ(ДНФА,"'+ss+'")');
     rs=Записей(wa);
     for i=1..rs do
	 try
	  BeginChanging(wa,false);
	   try
	     p=ЗаписатьПолеС(wa,i,'НеДействОст',НеДействОст);
	    EndChanging(wa);
	   Except
	    CancelChanging(wa);
	   end;
	 Finally
	 end;
     od;
     CloseWorkArea(wa);
end;
proc заменаchr13;
var i1,i,p,nrec,wa,wa1,rs,rs1:i;
var ss,ss1:s;
--     wa=OpenWorkArea('РПО_ДНФА','','ukey='+RecordToString(current));
     wa=OpenWorkArea('РПО_ДНФА','');
     rs=Записей(wa);
     for i=1..rs do
--	 nrec=ВзятьНомерЗаписи(wa,rec);
       wa1=OpenArray(wa,i,'Запрос','');
       rs1=Записей(wa1);
       for nrec=1..rs1 do
	 try
	  BeginChanging(wa1,false);
	   try
	     st[1]=ВзятьПолеС(wa1,nrec,'ПОДСКАЗКА');
	     st[2]=ВзятьПолеС(wa1,nrec,'ПОМОЩЬ1');
	     st[3]=ВзятьПолеС(wa1,nrec,'ПОМОЩЬ2');
--		 st[1]=ВыделитьСлово(1,st[1],'^M');
	     for i1=1..3 do
	       st[i1]=Раб.НФА.B01.ФорматСтрокиАн(st[i1],chr(13),'^M',2);
	     od;
	       p=ЗаписатьПолеС(wa1,nrec,'ПОДСКАЗКА',st[1]);
	       p=ЗаписатьПолеС(wa1,nrec,'ПОМОЩЬ1',st[2]);
	       p=ЗаписатьПолеС(wa1,nrec,'ПОМОЩЬ2',st[3]);
	    EndChanging(wa1);
	   Except
	    CancelChanging(wa1);
	   end;
	 Finally
	 end;
       od;
     od;
     CloseWorkArea(wa1);
     CloseWorkArea(wa);
end;

proc АвтоНастрСПР(РасчитатьВсеДвижения:l);
var i,p,nrec,wa,wa1,rs,rs1:i;
var ss,ss1:s;
 if не РасчитатьВсеДвижения:
   For i=1..Запрос do

       if pos('АНАЛИТИКА',Up(ТипПараметра_[i]))>0:
	  if pos('.',Запрос[i].Ответ)=pos('.*',Запрос[i].Ответ):
	     p=pos('.',Запрос[i].Ответ);
	     if p>1:Запрос[i].СПР=SubStr(Запрос[i].Ответ,1,p-1);fi;
	   | true: if pos('|',Запрос[i].Ответ)<1 and pos('&',Запрос[i].Ответ)<1 and pos('~',Запрос[i].Ответ)<1: -- отбор по справочнику без наворотов
		      if pos('*',Запрос[i].Ответ)<>1 and pos('?',Запрос[i].Ответ)<>1:
			p=pos('.',Запрос[i].Ответ);
			if p>1:Запрос[i].СПР=SubStr(Запрос[i].Ответ,1,p-1);fi;
		      fi;
		   fi;
	  fi;

       fi;
   od;
  | true: -- РасчитатьВсеДвижения
     wa=OpenWorkArea('РПО_ДНФА','','ukey<>'+RecordToString(current));
     rs=Записей(wa);
     for i=1..rs do
--	 nrec=ВзятьНомерЗаписи(wa,rec);
       wa1=OpenArray(wa,i,'Запрос','');
       rs1=Записей(wa1);
       for nrec=1..rs1 do
	 try
	  BeginChanging(wa1,false);
	   try
	     st[1]=ВзятьПолеС(wa1,nrec,'Ответ');
	     st[2]=ВзятьПолеС(wa1,nrec,'ТипПараметра');
	 if st[2]='9':
	    if pos('.',st[1])=pos('.*',st[1]):
	       p=pos('.',st[1]);
	       if p>1:p=ЗаписатьПолеС(wa1,nrec,'СПР',SubStr(st[1],1,p-1));fi;
	     | true: if pos('|',st[1])<1 and pos('&',st[1])<1 and pos('~',st[1])<1: -- отбор по справочнику без наворотов
			if pos('*',st[1])<>1 and pos('?',st[1])<>1:
			  p=pos('.',st[1]);
			  if p>1:p=ЗаписатьПолеС(wa1,nrec,'СПР',SubStr(st[1],1,p-1));fi;
			fi;
		     fi;
	    fi;
	 fi;
	    EndChanging(wa1);
	   Except
	    CancelChanging(wa1);
	   end;
	 Finally
	 end;
       od;
     od;
     CloseWorkArea(wa1);
     CloseWorkArea(wa);
 fi;
end;


Proc Menu_Alt_Enter_ПриНажатии(s:s);
 var Sect :s; -- имя текущей секции
 var Obj  :s; -- имя текущего объекта
 var Field:s; -- имя текущего поля
 var row,col,iter:i; -- Строка, столбец и итерация
 var Alt:i;
  Sect =AsString (Template.Name  );
  Obj  =AsString (Template.Object);
  Field=AsString (Template.Field );
  Row  =AsInteger(Template.Row	 );
  Col  =AsInteger(Template.Column);
  Iter =AsInteger(Template.Frame );
  ОчиститьПеременную(ForSelect);
  if Sect='Секц_Запрос':
      ForSelect[1]='Отмена';
      ForSelect[2]='Автоматически заполнить настраиваемые справочники';
      ForSelect[3]='Автоматически заполнить настраиваемые справочники во всех операциях';
      if НеДействСпр<>'':
	ForSelect[4]='Скопировать значение НеДействСпр во все операции';
      fi;
      Alt=Alternate('Заголовок',ForSelect,-1);
   | true:
      ForSelect[1]='Отмена';
      ForSelect[2]='Автоматически заполнить настраиваемые справочники';
      ForSelect[3]='Автоматически заполнить настраиваемые справочники во всех операциях';
      ForSelect[4]='Скопировать значение НеДействСпр в выбранные операции';
      ForSelect[5]='Скопировать значение НеДействОст в выбранные операции';
      ForSelect[6]='заменаchr13';
      Alt=Alternate('Заголовок',ForSelect,-1);
   --message('Контекстное меню для данного раздела не предусмотрено');
  fi;
  if Alt=2:АвтоНастрСПР(false);
   | Alt=3:АвтоНастрСПР(true);
   | Alt=4:КопирНеДействСпр;
   | Alt=5:КопирНеДействОст;
   | Alt=6:заменаchr13;
  fi;
end;

Proc ШаблонПриОткрытии(l:l);
 РАБ.НФА.B01.Ini_Menu_Alt_Enter;
 SQLver=SQLЗапросыРазрешены;
 БланкКОД=РАБ.НФА.B01.БланкИмя;
end;
Proc ШаблонПослеОткрытия(l:l);
end;
Proc ШаблонПриЗакрытии(l:l);
end;
var АвтоКн1_4:l;
2Proc0 2ШаблонПриЧтении0;
 var j:i;
 var ll:l;
 var ss:s;
 var rec:record;
 установили_блокировку=false;
 Button1.visible=КОНВ=0;
 if Запрос=0:InsertFrame(Запрос,1);fi;
 if Разработчик='':Разработчик=РазработчикПоУмолчанию;fi;
 ll=false;
 for j=1..ДОК do
  if Name_A(ДОК[j].ПРИЗНАК)=' ':
     ss='ВИДДОК.НФА.'+SubStr(ДОК[j].ПРИЗНАК,8,255);
     if Name_A(ss)<>' ':
	ДОК[j].ПРИЗНАК=ss;ll=true;
     fi;
  fi;
  if Name_A(ДОК[j].ПРИЗНАК)<>' ':
   rec=ПризнакВзапись(ДОК[j].ПРИЗНАК);
   if ДОК[j].ВИДДОК<>rec:ДОК[j].ВИДДОК=rec;ll=true;fi;
  fi;
 od;
    Секц_ОПИСАНИЕ.visible=ФлагОписание;
 if АвтоКн1_4:
    ll=ll or Кнопка1234_ПриНажатии;
 fi;
 if ll:EditorApply;fi;
2end0;

Proc ШаблонПриОтмене;
end;

Func ШаблонПриПроверке:l;
 if установили_блокировку:установили_блокировку=false;^true;fi;
 ^not Заблокирована;
end;







Proc Сохранить_OnClick(Row: Integer; Col: Integer; Double: Logical);
  if not Заблокирована:
    РедакторПрименить;
  fi;
end;


Proc Отмена_OnClick(Row: Integer; Col: Integer; Double: Logical);
  РедакторОтменить;
end;


Proc Help_OnClick(Row: Integer; Col: Integer; Double: Logical);
  var lnstr:LongString;
 var Sect :s; -- имя текущей секции
 var Obj  :s; -- имя текущего объекта
 var Field:s; -- имя текущего поля
 var iter:i; -- Строка, столбец и итерация
 var Alt:i;
  if Col>1:Col=Col-1;
     Template.Column=Col;
  fi;
--  Sect =AsString (Template.Name  );
--  Obj  =AsString (Template.Object);
  Field=AsString (Template.Field );
--  Row  =AsInteger(Template.Row   );
--  Col  =AsInteger(Template.Column);
--  Iter =AsInteger(Template.Frame );
  if Field='НеДействСпр':lnstr='Список справочников исключенных при работе с данной операцией^M^Mпример заполнения: ПГР|КТ|Ц|КВ';
   | Field='НеДействОст':
     lnstr='   Список справочников по которым не рассчитываются остатки^M'+
	   'при работе с данной операцией.^M'+
	   '   Соответственно выбор признака для справочника производится^M'+
	   'из списка аналитических признаков или соответствующей картотеки-аналитики,^M'+
	   'а не из списка признаков по которым уже числятся остатки по даннному справочнику^M'+
	   '^M'+
	   'пример заполнения: ПГР|КТ|Ц|КВ';
   | Field='ДНФА':lnstr='Помощь для данного раздела временно не работает!';
   | Field='ДНФАИМЯ':lnstr='Помощь для данного раздела временно не работает!';
   | true:lnstr='Помощь для данного раздела временно не работает!';
  fi;
  Сообщение(lnstr);
end;

Func НеДействСпр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 var ss:s;
 var ii:i;
 ii=Вопрос('РЕДАКТИРОВАНИЕ','Выберите действие','Отмена;Добавить;Удалить',mtConfirmation);
 if ii>1:
   if ii=2:ss=ВыборПризнака('*',true);if ss<>'':ss=РАБ.НФА.B01.ДобавитьПризнак(Cur,'|',ss);fi;
    | ii=3:ss=РАБ.НФА.B01.УдалитьПризнакИзНабора_Диалог(НеДействОст,'|');
   fi;
    НеДействСпр=ss;
    шаблон.СкрытьРедактор(false);
  | true:шаблон.СкрытьРедактор(false);^Cur;
 fi;

end;


Func НеДействОст_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 var ss:s;
 var ii:i;
 ii=Вопрос('РЕДАКТИРОВАНИЕ','Выберите действие','Отмена;Добавить;Удалить',mtConfirmation);
 if ii>1:
   if ii=2:ss=ВыборПризнака('*',true);if ss<>'':ss=РАБ.НФА.B01.ДобавитьПризнак(Cur,'|',ss);fi;
    | ii=3:ss=РАБ.НФА.B01.УдалитьПризнакИзНабора_Диалог(НеДействОст,'|');
   fi;
    НеДействОст=ss;
    шаблон.СкрытьРедактор(false);
  | true:шаблон.СкрытьРедактор(false);^Cur;
 fi;
end;
--Proc ПриВыходе(s:s;i:i);
--if s='НеДействСпр':НеДействСпр=РАБ.НФА.B01.УдалитьПризнакИзНабора_Диалог(НеДействСпр,'|');
-- | s='НеДействОст':НеДействОст=РАБ.НФА.B01.УдалитьПризнакИзНабора_Диалог(НеДействОст,'|');
--fi;
--end;
var ЗаменыКонв70_25[]:s;
var ЗаменыКонв70_25_1[]:s;
var ЗаменыКонв70_25_2[]:s;
Func Конв70_25(s:s;Приход:l;ТолькоВещ:l):s;
  var ss,ss0:s;
  var p,ii,z,ii1,z1:i;
  ss=s;
  z=длинамассива(ЗаменыКонв70_25);
  z1=длинамассива(ЗаменыКонв70_25_1);
  -- стандартные замены
  for ii=1..z do
    for ii1=1..z1 do
      if соотв(ЗаменыКонв70_25_1[ii1],'[*]'):ss0=ЗаменыКонв70_25_1[ii1];
       | true:ss0=ЗаменыКонв70_25_1[ii1]+ЗаменыКонв70_25[ii];
      fi;
      p=pos(ss0,ss);
      while p>0 do
	ss=SubStr(ss,1,p-1)+ЗаменыКонв70_25_2[ii1]+SubStr(ss,p+длина(ss0)-1,255);
	p=pos(ss0,ss);
      od;
    od;
  od;
  ------------------------
  -- дополнительные замены
      ss0='.101.08.310';
      p=pos(ss0,ss);
      while p>0 do
	ss=SubStr(ss,1,p-1)+'.105.05.340'+SubStr(ss,p+длина(ss0),255);
	p=pos(ss0,ss);
      od;
      if не Приход:
	ss0='.401.01.172';
	p=pos(ss0,ss);
	while p>0 do
	  ss=SubStr(ss,1,p-1)+'.401.01.271'+SubStr(ss,p+длина(ss0),255);
	  p=pos(ss0,ss);
	od;
      fi;
      if ТолькоВещ:
	ss0='.106.01.310';
	p=pos(ss0,ss);
	while p>0 do
	  ss=SubStr(ss,1,p-1)+'.106.04.340'+SubStr(ss,p+длина(ss0),255);
	  p=pos(ss0,ss);
	od;
	ss0='.304.04.310';
	p=pos(ss0,ss);
	while p>0 do
	  ss=SubStr(ss,1,p-1)+'.304.04.340'+SubStr(ss,p+длина(ss0),255);
	  p=pos(ss0,ss);
	od;
	ss0='.410';
	p=pos(ss0,ss);
	while p>0 do
	  ss=SubStr(ss,1,p-1)+'.440'+SubStr(ss,p+длина(ss0),255);
	  p=pos(ss0,ss);
	od;
	ss0='КОСГУ.310';
	p=pos(ss0,ss);
	while p>0 do
	  ss=SubStr(ss,1,p-1)+'КОСГУ.340'+SubStr(ss,p+длина(ss0),255);
	  p=pos(ss0,ss);
	od;
      fi;
  ------------------------

--  while p>0 do
--    ss=SubStr(ss,1,p)+'105.05.'+SubStr(ss,p+8,255);
--    p=pos('.101.08.',ss);
--  od;
  ^ss;
end;
2Func РасчетМаксКолПров0:i;
 var i,j,k,maxt,p1,p2:i;
 var s:s;
 j=Запрос;
 maxt=0;
 for i=1..j do
  s=Запрос[i].НомПроводки;
  for k=maxt+1..9 do
   p1=pos(str(k),s);
   p2=pos(str(k)+'-',s);
   if p1>0 и p2=0 и p1<Length(s):maxt=k;fi;
  od;
 od;
 ^maxt;
2end0;





Proc Button1_OnClick(Sender: String);
 var ii,j,2МаксКолПров0:i;
 var ss,ТАН:s;
 var ll,ВДll,ТолькоВещ:l;


--     ищем первый не занятый ТАН??
--    ВДll=false;for sign ss='ВД.*' do ВДll=true; od;
    2МаксКолПров0=2РасчетМаксКолПров0;
    ll=false;
    for j=1..Запрос do
      if Соотв(Запрос[j].Ответ,'ВД.*') :ll=true;break;fi;
    od;
    ТАН='';
    if not ll:
      ClearVariable(ForSelect);
      for j=1..9 do ForSelect[j]='АН0'+str(j);od;for j=10..25 do ForSelect[j]='АН'+str(j);od;
      for j=1..ДлинаМассива(ForSelect) do if ПоискВМассиве(Запрос[].ПолеПодтаблицы,ForSelect[j])>0:УдалитьИзМассива(ForSelect,j);j=j-1;fi;od;
      if длинамассива(ForSelect)>0:
	 ТАН=ForSelect[1];
	 ii=InsertFrame(ЗАПРОС,ЗАПРОС+1);
	 ЗАПРОС[ii].ЗАГОЛОВОК='Вид деятельности';
	 ЗАПРОС[ii].ОТВЕТ='ВД.*';
	 ЗАПРОС[ii].ТИППАРАМЕТРА=9;
	 ЗАПРОС[ii].ПОЛЕПОДТАБЛИЦЫ=ТАН;
	 ЗАПРОС[ii].ОБЯЗАТЕЛЬНЫЙ='';
	 ЗАПРОС[ii].НЕОБЯЗАТЕЛЬНЫЙ='*';
	 ЗАПРОС[ii].ЦЕНА       =false;
	 ЗАПРОС[ii].ДЛЯВСЕХ    =false;
	 ЗАПРОС[ii].ИТОГИ      =false;
	 ЗАПРОС[ii].СТИЛЬ      =StringToRecord('{4}');
	 ЗАПРОС[ii].ВИД1       ='код';
	 ЗАПРОС[ii].ВИД2       ='';
	 ЗАПРОС[ii].ВИД3       ='';
	 ЗАПРОС[ii].Ш1	       =200;
	 ЗАПРОС[ii].Ш2	       =0;
	 ЗАПРОС[ii].Ш3	       =0;
	 ЗАПРОС[ii].Ф1	       ='';
	 ЗАПРОС[ii].Ф2	       ='';
	 ЗАПРОС[ii].Ф3	       ='';
	 ЗАПРОС[ii].ПОДСКАЗКА  ='Вид деятельности';
	 ЗАПРОС[ii].КБКНФА     =false;
	 ЗАПРОС[ii].СЧЕТНФА    =false;
	 ЗАПРОС[ii].ОТВЕТКАРТ  ='';
	 ЗАПРОС[ii].КБКОТСЧЕТА ='';
	 ЗАПРОС[ii].СПР        ='ВД';
	 ЗАПРОС[ii].ПОМОЩЬ1    ='';
	 ЗАПРОС[ii].ПОМОЩЬ2    ='';
	 if Соотв(ДНФА,'ПРИХ.*'):ЗАПРОС[ii].СКНОПКОЙ=false;ЗАПРОС[ii].ОСТАТОК=false;
	  | true:ЗАПРОС[ii].СКНОПКОЙ=true;ЗАПРОС[ii].ОСТАТОК=true;
	 fi;
	 ЗАПРОС[ii].АНОТСЧЕТА  ='СЧНФА';
	 ss='';
	 for j=1..2МаксКолПров0 do ss=ss+str(j)+'о'; od;
	 ЗАПРОС[ii].НОМПРОВОДКИ=ss;
      fi;
    fi;
    for j=1..Запрос do
      if Запрос[j].Ответ='УЧН.*':--подстыковка УЧН к каждой проводке
	 ss='';
	 for ii=1..2МаксКолПров0 do ss=ss+str(ii)+'о'; od;
	 ЗАПРОС[j].НОМПРОВОДКИ=ss;
	break;
      fi;
    od;
    ТолькоВещ=false;
    for j=1..Запрос do
      if Запрос[j].Ответ='НФА.101.08.*' or Запрос[j].Ответ='НФА.101.08!' or Запрос[j].Ответ='НФА.101.08*':--только вещевка
	 ТолькоВещ=true;
	break;
      fi;
    od;

 ОчиститьПеременную(ЗаменыКонв70_25);
 ЗаменыКонв70_25[1]='.';
 ЗаменыКонв70_25[2]='!';
 ЗаменыКонв70_25[3]='*';
 ОчиститьПеременную(ЗаменыКонв70_25_1);
 ОчиститьПеременную(ЗаменыКонв70_25_2);
 ЗаменыКонв70_25_1[1 ]='.101.10';ЗаменыКонв70_25_2[1 ]='.101.09';
 ЗаменыКонв70_25_1[2 ]='.101.08';ЗаменыКонв70_25_2[2 ]='.105.05';
 ЗаменыКонв70_25_1[3 ]='.208.12';ЗаменыКонв70_25_2[3 ]='.208.19';
 ЗаменыКонв70_25_1[4 ]='.208.13';ЗаменыКонв70_25_2[4 ]='.208.20';
 ЗаменыКонв70_25_1[5 ]='.208.14';ЗаменыКонв70_25_2[5 ]='.208.22';
 ЗаменыКонв70_25_1[6 ]='.302.17';ЗаменыКонв70_25_2[6 ]='.302.19';
 ЗаменыКонв70_25_1[7 ]='.302.18';ЗаменыКонв70_25_2[7 ]='.302.20';
 ЗаменыКонв70_25_1[8 ]='.302.20';ЗаменыКонв70_25_2[8 ]='.302.22';

 ЗаменыКонв70_25_1[9 ]='[208.12]';ЗаменыКонв70_25_2[9 ]='[208.19';
 ЗаменыКонв70_25_1[10]='[208.13]';ЗаменыКонв70_25_2[10]='[208.20';
 ЗаменыКонв70_25_1[11]='[208.14]';ЗаменыКонв70_25_2[11]='[208.22';
 ЗаменыКонв70_25_1[12]='[302.17]';ЗаменыКонв70_25_2[12]='[302.19';
 ЗаменыКонв70_25_1[13]='[302.18]';ЗаменыКонв70_25_2[13]='[302.20';
 ЗаменыКонв70_25_1[14]='[302.20]';ЗаменыКонв70_25_2[14]='[302.22';
 ЗаменыКонв70_25_1[15]='.3.';ЗаменыКонв70_25_2[15]='.2.';
 ll=Соотв(ДНФА,'ПРИХ.*');
 for ii=1..ЗАПРОС do
   ЗАПРОС[ii].ОТВЕТ=Конв70_25(ЗАПРОС[ii].ОТВЕТ,ll,ТолькоВещ);
   ЗАПРОС[ii].Необязательный=Конв70_25(ЗАПРОС[ii].Необязательный,ll,ТолькоВещ);
   ЗАПРОС[ii].Обязательный=Конв70_25(ЗАПРОС[ii].Обязательный,ll,ТолькоВещ);
   if pos('|',ЗАПРОС[ii].ОтветКарт)>0:ЗАПРОС[ii].ОтветКарт='';fi;
 od;
 ДНФАИМЯ=Конв70_25(ДНФАИМЯ,ll,ТолькоВещ);
 конв=6;
 Button1.visible=КОНВ=0;
-- СЧЕТНФА ПОЛЕПОДТАБЛИЦЫ НОМПРОВОДКИ ОТВЕТ
-- 1 выборка групп НФА
-- 2 pos('СЧ',ПОЛЕПОДТАБЛИЦЫ)=1 и не СЧЕТНФА -- фильтр на проверку условий по счетам
-- выборка групп счетов
-- если КБКНФА то без вида деятельности
-- 3 формируем новую маску с учетом групп НФА
--в приходе не меняем 401.01.172 на 401.01.271
end;
proc ПриИзменении(s:s);
2-- блок обработки до проверки разрешения на изменения
 if  s='ФлCopyClosedModFob':
     if not ClosedModFob:CurrentRecord=Current;ClosedModFob=true;--блокировка от удаления
      | true:-- надо снять флаг
	Раб.SQL.SetClosedModFobUpdateOnBlankEditor_false(ИМЯКРТ,current,5,SQLver,true);
     fi;
     установили_блокировку=true;
     РедакторПрименить;
     установили_блокировку=false;
     ФлCopyClosedModFob.State=ClosedModFob;
     exit;
 fi;


--	       БалСтоим:n;НачисленоАморт:n;НормаДо:n;НормаПосле


2-- блок обработки с проверкой разрешения на изменения
end;
Proc ПриВыходе(FieldName: String; Iter: Integer);
 if Заблокирована:fi;
end;




Конец
