-- Шаблон разработан дилером Вылегжаниным А.Ю., Киров, domino@ezmail.ru
-- 25.04.2001 12:52:41
-- Авторы	ВЫЛЕГЖАНИН
--		ЧУДОВ
--		ШУЛЬМАН
--
БланкСШаблоном "Библиотека функций и процедур от дилеров ДИЦ";

-- СОДЕРЖАНИЕ:
-- 1. ФУНКЦИИ ДЛЯ РАБОТЫ С ДАТАМИ И ВРЕМЕНЕМ
--    1.1 ФУНКЦИЯ, КОТОРАЯ ВОЗВРАЩАЕТ ДЕНЬ НЕДЕЛИ. АВТОР ШУЛЬМАН.
--    1.2 ПРЕОБРАЗОВАНИЕ ТЕКУЩЕГО ВРЕМЕНИ В СЕКУНДАХ К ВИДУ ЧЧ:ММ:СС. АВТОР ЧУДОВ.
--    1.3 ПЕРЕВОД ВРЕМЕНИ ОТ НАЧАЛА СУТОК В СТРОКОВЫЙ ФОРМАТ ВИДА ЧЧ ЧАС. ММ МИН. СС СЕК. АВТОР ЧУДОВ.
--    1.4 ПЕРЕВОД ДАТЫ В ФОРМАТ ДД/ММ/ГГ. АВТОР ВЫЛЕГЖАНИН .
-- 2. СТРОКОВЫЕ ФУНКЦИИ
--    2.1 ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ СТРОКОВОГО ВЫРАЖЕНИЯ В ЧИСЛОВОЕ. АВТОР ВЫЛЕГЖАНИН.
--    2.2 ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ ЧИСЛОВОГО ВЫРАЖЕНИЯ В СТРОКОВЕ. РАЗДЕЛИТЕЛЬ ЦЕЛОЙ И ДРОБНОЙ ЧАСТИ "ЗАПЯТАЯ" . АВТОР ВЫЛЕГЖАНИН. domino@ezmail.ru
--    2.3 ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ НОМЕРА ЗАПИСИ В ЦЕЛОЕ ЧИСЛО. АВТОР ВЫЛЕГЖАНИН. domino@ezmail.ru
--    2.4 ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ НОМЕРА ЗАПИСИ В СТРОКУ БЕЗ СКОБОК. АВТОР ВЫЛЕГЖАНИН. domino@ezmail.ru
--    2.5 ФУНКЦИЯ ЗАМЕНЫ СТРОКИ ВХОДЯЩЕЙ В СТРОКУ ИСТОЧНИК НА ДРУГУЮ. АВТОР ЧУДОВ
--    2.6 ФУНКЦИЯ ВОЗВРАЩАЕТ ПОДСТРОКУ СОСТАВНОГО АНАЛИТИЧЕСКОГО ПРИЗНАКА. АВТОР ВЫЛЕГЖАНИН.
-- 3. БУХГАЛТЕРСКИЕ ФУНКЦИИ
--    3.1 ФУНКЦИЯ ВОЗВРАЩАЕТ АНАЛИТИЧЕСКИЙ ПРИЗНАК ПО МАСКЕ ИЗ НАБОРА АНАЛИТИЧЕСКИХ ПРИЗНАКОВ. АВТОР ВЫЛЕГЖАНИН. domino@ezmail.ru
-- 4. ФУНКЦИИ ДЛЯ РАБОТЫ С КАРТОТЕКАМИ
--    4.1 ФУНКЦИЯ , КОТОРАЯ ВОЗВРАЩАЕТ НАИМЕНОВАНИЕ КАРТОТЕКИ, ПО НАИМЕНОВАНИЮ БЛАНКА РЕДАКТОРА АВТОР ЧУДОВ
-- 5. СЕРВИСНЫЕ ФУНКЦИИ
--    5.1 ПРОЦЕДУРА ОТОБРАЖАЮЩАЯ РАБОТУ ЦИКЛА В СТРОКЕ ПОДСКАЗКИ ПО ИДЕЕ РОМАНА ВОЛКОВИЧА

-------------------------------------------------------------------------------------------
-- РАЗДЕЛ никакой, или предисловие
-------------------------------------------------------------------------------------------

--- ПОВТОР функции из РАБ.ФОРМАТ, поскольку к сожалению РАБ.ДИЛЕР компилируется
--- первым. Алфавит понимашь!
  func AllTrim (s : String) :String;
  -- удаляет из строки ведущие и замыкающие пробелы
  var a :String;
  var i,j :Integer;
    i = 1;
    a = Substr(s,i,1);
    while (a=' ')ИЛИ(a=CHR(9)) do
      i = i + 1;
      a = Substr(s,i,1);
    od;
    j = Length(s);
    a = Substr(s, j, 1);
    while (a=' ')ИЛИ(a=CHR(9)) do
      j = j - 1;
      a = Substr(s, j, 1);
    od;
    Return(Substr(s, i, j-i+1));
  end; -- Trim

-------------------------------------------------------------------------------------------
-- РАЗДЕЛ 1.
-------------------------------------------------------------------------------------------
--    1.1 ФУНКЦИЯ, КОТОРАЯ ВОЗВРАЩАЕТ ДЕНЬ НЕДЕЛИ. АВТОР ШУЛЬМАН

func div(x:i;y:i):i;
^int(TRUNC(X/Y));
cnuf;
-------
func mod(x:i;y:i):i;
^int(x-y*div(x,y));
cnuf;
--В качестве базовой даты можно выбрать любой подходящий понедельник.
func dayn(d:d):i;
^mod(d-01.01.2001,7);
cnuf;
-------
func ДеньНедели(d:d):s;
if dayn(d)=0:^"Понедельник";
|  dayn(d)=1:^"Вторник";
|  dayn(d)=2:^"Среда";
|  dayn(d)=3:^"Четверг";
|  dayn(d)=4:^"Пятница";
|  dayn(d)=5:^"Суббота";
|  dayn(d)=6:^"Воскресенье";
|true:^'Ошибка';
fi;
cnuf;

проц Пример1_1 (Об:С);
  Перем Д:Строка;
  Д=ДеньНедели(01.01.2001);
конец;

---Англоязычный синоним
func DayOfWeek(dt:d):s;
    ^ДеньНедели(dt);
cnuf;

-------------------------------------------------------------------------------------------
--    1.2 ПРЕОБРАЗОВАНИЕ ТЕКУЩЕГО ВРЕМЕНИ В СЕКУНДАХ К ВИДУ ЧЧ:ММ:СС. АВТОР ЧУДОВ

ФУНК ВремяВСтроку(Сек:Ц):С;

    ПЕРЕМ Часов:Ч;
    ПЕРЕМ Минут:Ч;
    ПЕРЕМ Секунд:Ч;
    ПЕРЕМ Рез:С;

     --Преобразование текущего времени в секундах к виду ЧЧ:ММ:СС

	  Минут=Отбр(Сек/60);
	  Секунд=Сек-Минут*60;
	  Часов=Отбр(Минут/60);
	  Минут=Минут-Часов*60;

      Рез=Если(Часов<10,"0","")+СТР(Часов)+":"
	  +Если(Минут<10,"0","")+СТР(Минут)+":"
	  +Если(Секунд<10,"0","")+СТР(Секунд);
     ^Рез;

КНУФ;

--Англоязычный синоним
func TimeToString(Sec:I):S;
     ^ВремяВСтроку(Sec);
cnuf;

проц Пример1_2 (Об:С);
  Перем В:Строка;
  В=ВремяВСтроку(Время);
конец;

-------------------------------------------------------------------------------------------
--    1.3 ПЕРЕВОД ВРЕМЕНИ ОТ НАЧАЛА СУТОК В СТРОКОВЫЙ ФОРМАТ ВИДА ЧЧ ЧАС. ММ МИН. СС СЕК. АВТОР ЧУДОВ

ФУНК ВремяВстроку_СТР(Сек:Ц):С;
     ПЕРЕМ Часы:Ч;
     ПЕРЕМ Минуты:Ч;
     ПЕРЕМ Секунды:Ч;

	   Минуты=Отбр(Сек/60,0);
	   Секунды=Сек-Минуты*60;
	   Часы=Отбр(Минуты/60,0);
	   Минуты=Минуты-Часы*60;

	   ^(СТР(Часы)+" час. "+СТР(Минуты)+" мин. "+СТР(Секунды)+ " сек.");

КНУФ;

--Англоязычный синоним
func TimeToString_str(Sec:I):S;
     ^ВремяВСтроку(Sec);
cnuf;


проц Пример1_3 (Об:С);
  Перем В:Строка;
  В=ВремяВстроку_СТР(Время);
конец;

-------------------------------------------------------------------------------------------
--    1.4 ПЕРЕВОД ДАТЫ В ФОРМАТ ДД/ММ/ГГ. АВТОР ВЫЛЕГЖАНИН .

func ДатуТТ (Дата_:Д):С;
Перем Дд:С;
Перем ММ:С;
Перем ГГ:С;
   if День(Дата_)<10:
      ДД="0"+Стр(День(Дата_));
   | true:
      ДД=Стр(День(Дата_));
   fi;
   if Мес(Дата_)<10:
      ММ="0"+Стр(Мес(Дата_));
   | true:
      ММ=Стр(Мес(Дата_));
   fi;
   ГГ=Стр(Год(Дата_));
   ^ДД+"/"+ММ+"/"+ГГ;

КОНЕЦ;

--Англоязычный синоним
func DateTT(Date_:D):S;
     ^ДатуТТ (Date_);
end;

проц Пример1_4 (Об:С);
     Перем Д:Строка;

     Д=ДеньНедели(01.01.2001);
     --"Косим" под стандарт BRITISH/FRECH ДД/ММ/ГГ
     Message("Возможно так писал даты Щерлок Холмс -"+Д);

конец;


-------------------------------------------------------------------------------------------
-- РАЗДЕЛ 2.
-------------------------------------------------------------------------------------------
--    2.1 ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ СТРОКОВОГО ВЫРАЖЕНИЯ В ЧИСЛОВОЕ. АВТОР ВЫЛЕГЖАНИН.

Функ СтрокуВЧисло (Об:С):Ч;
Перем ЦелЧасть	  :Ц;
Перем ДесятичЧасть:Ц;
Перем ЧЧисло	  :Ч;
Перем Итер	  :Ц;
Перем ИтерТочек   :Ц;
Перем Сим	  :С;
-- Проверка формата строки
Итер=1;
while Итер<=Длина(Об) do
      Сим=SubStr(Об,Итер,1);
      -- проверим строку на посторонние символы
      if Сим<>"0" и Сим<>"1" и Сим<>"2" и Сим<>"3" и Сим<>"4" и Сим<>"5" и Сим<>"6" и Сим<>"7" и Сим<>"8" и Сим<>"9" и Сим<>".":
	 Сообщение (Об+" - неверный формат !");
	 Итер=Длина(Об);
	 ^0;
      fi;
      -- Проверим количество точек в строке
      if Сим=".":
	 ИтерТочек=ИтерТочек+1;
	 if ИтерТочек>1:
	 Сообщение (Об+" - неверный формат !");
	 Итер=Длина(Об);
	 ^0;
	 fi;
      fi;
      Итер=Итер+1;
od;
-- определение числового значения
ЦелЧасть=Цел(Об);
if Длина(Стр(ЦелЧасть))=Длина(Об):
   ^ЦелЧасть;
|  true:
    ДесятичЧасть=Цел(SubStr(Об,Длина(Стр(ЦелЧасть))+2,Длина(Об)));
    ЧЧисло=Цел(ЦелЧасть)+Цел(ДесятичЧасть)/Эксп(Длина(Стр(ДесятичЧасть))*Лог(10));
    ^ЧЧисло;
fi;
Конец;

--Английский синоним
func StringToNumber(Stri:S):N;
     ^СтрокуВЧисло(Stri);
cnuf;

Проц Пример2_1(Об:С);
  Перем Чис:Ч;
  Чис=СтрокуВЧисло("20.1234");
конец;
-------------------------------------------------------------------------------------------
--    2.2 ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ ЧИСЛОВОГО ВЫРАЖЕНИЯ В СТРОКОВЕ. РАЗДЕЛИТЕЛЬ ЦЕЛОЙ И ДРОБНОЙ ЧАСТИ "ЗАПЯТАЯ" . АВТОР ВЫЛЕГЖАНИН. domino@ezmail.ru

функ СтрЗ(Чис:Ч;Знаков:Ц):С;
ПЕРЕМ МЧис	:Ч;	-- модуль числа
ПЕРЕМ Модуль	:С;	-- модуль числа
    if SubStr(Стр(Чис),1,1)="-":
       МЧис  =-1*Чис;
       Модуль="-";
    |  true:
       МЧис  =Чис;
    fi;

    ^(Модуль+(Стр(Цел(Отбр(Окр(МЧис,2))))+","+SubStr(Стр(МЧис,Знаков),
      Длина(Стр(Цел(МЧис)))+2,Знаков)));

конец;
--Английский синоним
func StrComma(Num:N;Sig:I):S;
     ^СтрЗ(Num,Sig);
cnuf;

Проц Пример2_2(Об:С);
  Перем СтрЗнач:С;
  СтрЗнач=СтрЗ(20.1234,2);
конец;

-------------------------------------------------------------------------------------------
--    2.3 ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ НОМЕРА ЗАПИСИ В ЦЕЛОЕ ЧИСЛО. АВТОР ВЫЛЕГЖАНИН. domino@ezmail.ru
функ ЗаписьВцелое (Зап:Запись):Ц;
     ^Цел(SubStr(ЗаписьВСтроку(Зап),2,Длина(ЗаписьВСтроку(Зап))-2));
конец;

---Англоязычный синоним
func RecordToInt(rec:record):i;
    ^ЗаписьВцелое(rec);
cnuf;



Проц Пример2_3(Об:С);
ПЕРЕМ Зап	:Запись;
ПЕРЕМ НомерЗ	:Целое;
      НомерЗ=ЗаписьВцелое (Зап);
      --Зап={1}
      --НомерЗ=1;
конец;

-------------------------------------------------------------------------------------------
--    2.4 ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ НОМЕРА ЗАПИСИ В СТРОКУ БЕЗ СКОБОК. АВТОР ВЫЛЕГЖАНИН. domino@ezmail.ru

функ ЗаписьСтрокуБезСкобок (Зап:Запись):С;
     ^SubStr(ЗаписьВСтроку(Зап),2,Длина(ЗаписьВСтроку(Зап))-2);
конец;

---Англоязычный синоним
func RecordToStrClean(rec:record):i;
    ^ЗаписьВцелое(rec);
cnuf;


Проц Пример2_4(Об:С);
ПЕРЕМ Зап	:Запись;
ПЕРЕМ Ст	:Строка;
      Ст=ЗаписьСтрокуБезСкобок (Зап);
      --Зап={1}
      --Ст=1;
конец;

-------------------------------------------------------------------------------------------
--    2.5 ФУНКЦИЯ ,КОТОРАЯ НАХОДИТ ВХОЖДЕНИЕ СТРОКИ СтрЗаменяемая В СтрИсточник И
--    ЗАМЕНЯЕТ ЕГО НА СтрЗаменитель
Функ СтрЗаменить(СтрИсточник:С;СтрЗаменяемая:С;СтрЗаменитель:С;УчитыватьРегистр:Л):С;

     -- Если переменная УчитыватьРегистр=ИСТИНА, вхождения проверяются с учетом регистра знаков

     перем НовСтрока:с;
     перем TempStr:s; --Временная переменная строки источника для проверки вхождения
     перем TempConst:s; --Временная переменная строки источника c неизменным регистром
     перем LenOld:i; --длина заменяемой строки
     перем TempOld:s;  --временная переменная для заменяемого вхождения
     перем Ps:i;

	   If УчитыватьРегистр:
	      TempStr=СтрИсточник;
	      TempOld=СтрЗаменяемая;
	   else
	      TempStr=Up(СтрИсточник);
	      TempOld=Up(СтрЗаменяемая);
	   fi;

	   If Поз(TempOld,TempStr)=0:
	      ^СтрИсточник;
	      --Заменяемая строка указана неверно возвращаем
	      --неизменный источник
	   fi;

	   НовСтрока="";
	   TempConst=СтрИсточник;
	   LenOld=Длина(СтрЗаменяемая);

	   Пока Поз(TempOld,TempStr)>0 Цикл

		НовСтрока=НовСтрока+Подстр(TempConst,1,Поз(TempOld,TempStr)-1)+СтрЗаменитель;

		If Длина(TempStr)>LenOld:
		   ps=Поз(TempOld,TempStr);
		   TempStr=Подстр(TempStr,Ps+LenOld-1,Длина(TempStr)-(Ps+LenOld-1));
		   TempConst=Подстр(TempConst,Ps+LenOld-1,Длина(TempConst)-(Ps+LenOld-1));
		   |true: 
		   TempStr=""; 
		   TempConst="";
		fi;
	   Лкиц;
	   ^НовСтрока;
Кнуф;

func StrReplace(СтрИсточник:С;СтрЗаменяемая:С;СтрЗаменитель:С;УчитыватьРегистр:Л):S;
     ^СтрЗаменить(СтрИсточник,СтрЗаменяемая,СтрЗаменитель,УчитыватьРегистр);
end;

Проц Пример2_5(Об:С);
  Перем Источ:С;
  Перем Резул:С;

	Источ="МОЛ.*|СКЛАД.*|ТМЦ.*";

	Trace("Перечень признаков "+Источ);

	--Заменяем "|" на "&"

	Резул=StrReplace(Источ,"|",CHR(38),False);

	Trace("Маска для отбора оборотов "+Резул);

	--Результатом является строка "МОЛ.*&СКЛАД.*&ТМЦ.*"

конец;

-------------------------------------------------------------------------------------------
--    2.6 ФУНКЦИЯ ВОЗВРАЩАЕТ ПОДСТРОКУ СОСТАВНОГО АНАЛИТИЧЕСКОГО ПРИЗНАКА. АВТОР ВЫЛЕГЖАНИН.

func ПризнПослеТочки (Ст:с;КолТоч:Ц):С;
Перем ИтерПоз	:Ц;
Перем ИтерТоч	:Ц;
Перем ПозСим	:Ц;
Перем ДлинаСло	:Ц;
Перем Сим	:С;
Перем Признак	:С;
 ДлинаСло=Длина(Ст);
 if ДлинаСло=0:
    ^"";
 fi;
 Сим="";
 ПозСим=Длина(Ст);
 ИтерПоз=0;
 ИтерТоч=0;
 while ИтерТоч<>КолТоч do
    Сим=SubStr(Ст,ПозСим,1);
    ИтерПоз=ИтерПоз+1;
    ПозСим=ДлинаСло-ИтерПоз;
    if Сим=".":
      ИтерТоч=ИтерТоч+1;
    fi;
 end;
 Признак=SubStr(Ст,ПозСим+2,ДлинаСло);
 ^Признак;
Конец;

---Англоязычный синоним
func SignPoint(Sig:s;Ndot:i):s;
    ^ПризнПослеТочки(Sig,Ndot);
cnuf;


Проц Пример2_6(Об:С);
Перем Подст	:С;
Перем Ст	:С;
     Ст="Ю.1.2.3.4";
     Подст=ПризнПослеТочки (Ст,1);
     -- возвращает "4"
     -- Ст="Ю.1.2.3.4"
     -- Подст=ПризнПослеТочки (Ст,2);
     -- возвращает "3.4"
конец;

-------------------------------------------------------------------------------------------
-- РАЗДЕЛ 3.
-------------------------------------------------------------------------------------------
--    3.1 ФУНКЦИЯ ВОЗВРАЩАЕТ АНАЛИТИЧЕСКИЙ ПРИЗНАК ИЗ НАБОРА АНАЛИТИЧЕСКИХ ПРИЗНАКОВ. АВТОР ВЫЛЕГЖАНИН. domino@ezmail.ru

Функ ПризнакПроводкиПоМаске (Стр_:С;Маска_:С):С;
ПЕРЕМ Нач	:Ц;
ПЕРЕМ Кон	:Ц;
ПЕРЕМ Итер	:Ц;
ПЕРЕМ Сим	:С;
ПЕРЕМ Маска1	:С;
ПЕРЕМ Признак	:Ц; -- 1 - только дебетовый признак, -1 - только кредитовый признак
      if SubStr(Маска_,1,1)="+":
	 Признак=1;
      |  SubStr(Маска_,1,1)="-":
	 Признак=-1;
      fi;
      -- позиция начального символа в рассматриваемой строке
      Нач=Поз(Бол(Маска_),Бол(Стр_));
      if Нач=0:
      -- нет в строке искомой подстроки. Проверим есть ли в рассматриваемой строке
      -- признак-Маска без указания "+" или "-"
	 Маска1=SubStr(Маска_,2,Длина(Маска_));
	 Нач=Поз(Маска1,Стр_);
	 if Нач=0:
	    -- в рассматриваемой строке нет признака соответствующего маске
	    ^"";
	 fi;
      |  true:
      -- подстрока обнаружена
	 if Признак=0:
	    Маска1=Маска_;
	 |  true:
	    -- обнаружен признак в формате "+Признак" или "-Признак"
	    -- признак для возврата должен быть в формате "Признак"
	    Нач=Нач+1;
	    Маска1=SubStr(Маска_,2,Длина(Маска_));
	 fi;
      fi;
      if SubStr(Стр_,Нач,Длина(Бол(Маска1)))=Бол(Маска1):
	 --
	 Итер=Нач;
      |  true:
	 -- Строка Ф.01234
	 -- Маска="Ф.1", позиция подстроки 1, маска Ф.1 не удавлетворяет строке Ф.01234
	 Итер=100000000;
      fi;
      Сим=SubStr(Стр_,Нач,1);
      while Сим<>" " И Итер<=Длина(Стр_) do
	    Итер=Итер+1;
	    Сим=SubStr(Стр_,Итер,1);
	    if Сим=" ":
	       Кон=Итер;
	       Прервать;
	    |  Итер=Длина(Стр_):
	       Кон=Итер+1;
	       Прервать;
	    fi;
      end;
      ^SubStr(Стр_,Нач,Кон-Нач);
Конец;

--Английский синоним
func SignByMask(Stri:s;Mas:s):S;
     ^ПризнакПроводкиПоМаске(Stri,Mas);
cnuf;


Проц Пример3_1;
  Перем t	:Ц;
  Перем Ana	:С;
  Перем Приз	:С;
  Для проводки t = " ", 01.01.2001, 01.01.2002 Do
      Ana = ПроводАналитика(t); -- аналитика проводки
      Приз=ПризнакПроводкиПоМаске (Ana ,"Ф.00");
      -- Ana="Ф.001 П.01"
      -- Приз="Ф.001"
      -- Приз=ПризнакПроводкиПоМаске (Ana ,"Ф.1");
      -- Ana="Ф.001 П.01"
      -- Приз=""
  Конец;

Конец;

------------------------------------------------------------------------------------------------
--РАЗДЕЛ 4
------------------------------------------------------------------------------------------------
--    4.1 ФУНКЦИЯ ВОЗВРАЩАЮЩАЯ НАИМЕНОВАНИЕ КАРТОТЕКИ, ПО НАИМЕНОВАНИЮ ФАЙЛА БЛАНКА ОПИСАНИЯ
--	  специально для Владимира Нескоромного от коллег в подарок
--	  за успехи в борьбе за интересы дилеров

Функ ВзятьКартИмя(НаимБлн:С):С;
     --Возвращает наименование	картотеки по наименованию бланка описания
     --При отсутсвии бланка, 
     --или если бланк- не редактор возвращает пустую строку

     Перем НомерФайла:Ц;
     Перем НаимКарт:С; --Результат функции.
     Перем ТекСтр:С;
     Перем Всп:Ц; --Вспомогателная переменная для удобства создания кода

	   Попытка

	   НомерФайла=ТекстФайлОткрытьНаЧтение(НаимБлн);

		НаимКарт="";

	   Пока ТекстФайлКонецФайла(НомерФайла) = Ложь Цикл

		ТекСтр = ТекстФайлПрочитатьСтроку(НомерФайла);

		--"Обрубаем" комментарии


		If  Поз("--",ТекСтр)=1: ТекСтр="";

		   |Поз("--",ТекСтр)>1: ТекСтр=Подстр(ТекСтр,1,Поз("--",ТекСтр)-1);
		    --если Директива "Редактор"("EDITOR") закомментирована,то она "обрубается"
		    --и далее не анализируется

		Fi;


		If  (Поз("РЕДАКТОР ",БОЛ(ТекСТР))>0):
		    -- for Russia
		    --Действия если обнаружена НЕЗАКОММЕНТИРОВАННАЯ директива "редактор"
		     Всп=ПОЗ("РЕДАКТОР ",БОЛ(ТекСтр));
		     ТекСтр=Подстр(ТекСтр,Всп+9,Длина(ТекСтр)-(всп+8));
		     НаимКарт=Подстр(ТекСтр,1,Поз(";",ТекСтр)-1);--Выделено наименование картотеки после директивы


		    --Но с "висящими" пробелами
		    --удаляем висящие пробелы
		    --ввиду того, что использование РАБ.ФОРМАТ.TRIM Может вызвать сообщение об ошибке(Если РАБ.Дилер будет компилир. раньше, чем Раб.Формат)
		    -- удаляем пробелы копией этой функции (копия в заголовке)
		     НаимКарт=ALLTrim(НаимКарт);

		     Прервать;

		   | (Поз("EDITOR ",БОЛ(ТекСТР))>0):
		    -- for English?
		    -- то же что и выше но английский синоним
		      Всп=ПОЗ("EDITOR ",БОЛ(ТекСтр));
		      ТекСтр=Подстр(ТекСтр,Всп+7,Длина(ТекСтр)-(всп+6));
		      НаимКарт=Подстр(ТекСтр,1,Поз(";",ТекСтр)-1);--Выделено наименование картотеки после директивы
		    --Но с "висящими" пробелами
		    --удаляем висящие пробелы
		    --ввиду того, что использование РАБ.ФОРМАТ.TRIM Может вызвать сообщение об ошибке(Если РАБ.Дилер будет компилир. раньше, чем Раб.Формат)
		    -- удаляем пробелы копией этой функции (копия в заголовке)
		      НаимКарт=ALLTrim(НаимКарт);
		      Прервать;
		fi;


	   Лкиц;
	   --- Если просмотрен	файл и необнаружено ключевое слово Редактор или
	   --  Editor то вероятно это не бланк редактор

	   if НаимКарт="":
	   Сообщение("Выбранный бланк не редактирует картотеку");
	   Fi;

	   ТекстФайлЗакрыть(НомерФайла);


	   ^НаимКарт;

	   Исключение
	   Сообщение("Неудача при попытке открытия "+НаимБлн);
	   ^"";
	   Конец;



Кнуф;

--Англоязычный синоним функции
Func GetCardName(NameBln:S):S;
     ^ВзятьКартИмя(NameBln);
Cnuf;


ПРОЦ Пример4_1(Об:С);
     Перем Карт:С;

     Трассировка(БланкИмяФайла('')); --Вывод окне трассировки наименования бланка
     --из которого запущена процедура
     Карт=ВзятьКартИмя(БланкИмяФайла(''));
     Трассировка(Карт); --Вывод окне трассировки наименования картотеки (если есть)


ЦОРП;

--------------------------------------------------------------------------------------------------
--РАЗДЕЛ 5
--------------------------------------------------------------------------------------------------
--ПРОЦЕДУРА ОТОБРАЖАЮЩАЯ РАБОТУ ЦИКЛА

Счет:I;
Инд:С;

ПРОЦ РаботаЦикла(Подск:С;Пакет:I;Знак:С);
     -- Подск Текст выводимый в строке подсказке(слева от "градусника")
     -- Пакет - Количество циклов отображаемое одной секцией "градусника"
     -- Знак  - Знак отображающий секцию "градусника", например "@"

    Раб.дилер.Счет=Раб.дилер.Счет+1;

     If Раб.дилер.Счет<Пакет: Выход; Fi;

	Раб.дилер.Инд=Раб.дилер.Инд+Знак;

	Раб.дилер.Счет=0;

     If Длина(Раб.дилер.Инд)>=30:
	Раб.дилер.Инд="";
     Fi;

     ПОДСКАЗКА(Подск +Раб.дилер.инд);

ЦОРП;

--Английский синоним
Proc WorkDo(Hin:s;Pak:i;Char:s);
     РаботаЦикла(Hin,Pak,Char);
End;

Проц Пример5_1(Об:С);
     перем MaxLen:i;
     перем i:i;
     перем Temp:i;
	   MaxLen=40;
	   Для i=1..MaxLen Цикл
	       Temp=Time;
	       Пока Temp=Time Цикл
		    --Крутим цикл задержки
	       Лкиц;
	       РаботаЦикла("Идет прогрев процессора...",2,CHR(169));
	   Лкиц;
Цорп;

---------------------------------------------------------------------------------------------------
-- СЛУЖЕБНЫЕ --------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------


Проц ОткрытьФПомощи (Об:С);
Перем рез	: Целое;
Перем STD	: Строка;

      STD = PlanVar('STD'); -- получаем путь к директории STD
      -- Должно работать независимо от версии в том числе и SQL

      Рез = ВыполнитьПрограмму(STD+"\Dealers.hlp");


конец;





Конец
