Компонента:	TurboBL
Версия:		1.1.0.1
Автор:		Александр Орефков (orefkov@ezmail.ru)
Назначение:	Ускорение вызова методов и обращения к свойствам объектов 1С-Предприятия 7.7

КРАТКИЙ ЭКСКУРС В МЕХАНИЗМ ВЫЗОВА МЕТОДОВ.
	ДЛЯ ВСЕХ	
		Что происходит внутри 1С, когда мы пишем спр.ТекущийЭлемент()?
		1С преобразует имя метода ТекущийЭлемент в соответствующий ему
		номер, и вызывает метод объекта по номеру.
		НО, клинические исследования показали, что для ЛЮБОГО объекта 1С
		используется один алгоритм такого преобразования, реализованный "В ЛОБ",
		и котрый заключатся в простом последовательном переборе всех имен методов
		объекта и сравнении их с искомым.
		Соответственно, чем больше номер метода, тем большее время занимает такой поиск.
		Например, для того же "ТекущийЭлемент" перед реальным вызовом функции происходит
		перебор 88 названий методов.
		Аналогично и для свойств объектов.
	ДЛЯ ЗНАКОМЫХ С "RAINBOW"
		Как известно, для поиска номера метода применяется
		virtual int CBLContext::FindMethod(const char* name);
		Как оказалось, НИ В ОДНОМ из объектов 1С данный метод не
		переопределен. Перехват вызова функций различных объектов
		показал лень и мягко говоря, не вполне компетентность людей,
		писавших этот код.
		Вобщем, когда вызывается FindMethod, из него вызываются:
		GetNMethods(), GetMethodName(i,0), GetMethodName(i,1)
		т.е. FindMethod работает примерно так:
		for(int i=0;i<GetNMethods();i++)
		{
			if(!stricmp(name,GetMethodName(i,0))
				return i;
			if(!stricmp(name,GetMethodName(i,1))
				return i;
		}
		return -1;
		Понятно, хотелось добиться универсальности и простоты, что и достигнуто.
		Но при этом:
		Некомпетентность: GetNMethods можно вынести из цикла.
		Лень: не зря же FindMethod виртуальная, почему же она
		не переопределена ни в одном из наследуемых классов для более
		оптимального поиска?
		Аналогичная ситуация и с FindProp.

ЦЕЛЬ КОМПОНЕНТЫ
	Дабы устранить эту досадную оплошность при поиске методов и свойств,
	мною и была создана	данная ВК. Суть ее работы в следующем:
	оптимизация алгоритма преобразования имен методов/свойств в их номера.
	Попутно сделана возможность обращаться к методам и переменным модулей
	ГрупповыхКонтекстов.

КАК ИСПОЛЬЗОВАТЬ
	ЗагрузитьВнешнююКомпоненту("turbobl.dll");
	Вот практически и все.
	Более никаких изменений в существующем коде конфигурации не требуется.
	При загрузке компонента берет на себя всю работу по поиску номеров
	методов и свойств объектов 1С.

ВЫЗОВ МЕТОДОВ МОДУЛЕЙ ГРУППОВЫХ КОНТЕКСТОВ
	Да!!! Свершилось!!!
	Теперь можно через контекст обратится к методам и переменным модуля контекста.
	Например:
	конт=0;
	ОткрытьФорму("Справочник.Товары",конт);
	конт.Печать();	//где Печать() - процедура в модуле ФормыСписка справочника.
	или например:
	// в модуле проведения дока
	Процедура ЭтоДокСТоваром()
		возврат 1;
	КонецПроцедуры;
	Процедура ОбработкаПроведения(парам)
		глНекаяГлобФункция(Контекст);
		....
		
	// В ГМ:
	Процедура глНекаяГлобФункция(Конт)
		Если Конт.ЭтоДокСТоваром()=1
		.......

	ОБЪЕКТ "УскорительГК"
		Объект "УскорительГК" предназначен для возможности обращения
		через контекст к методам и переменным ВНЕШНИХ ОТЧЕТОВ.
		Для этого во внешнем отчете необходимо вызвать его метод "Ускорить"
		Вполне достаточно иметь один экземпляр объекта "УскорительГК"
		Например в ГМ
		Перем глУск;
		глУск=СоздатьОбъект("УскорительГК");
		Во внешнем отчете:
		глУск.Ускорить();
		МЕТОД "Ускорить" ("Boost")
			Параметров нет.
			Возвращаемого значения нет.
			ВАЖНО: метод должен вызываться непосредственно в модуле внешнего отчета.

ПРИМЕРЫ.
	В поставку входит небольшая демобаза, для демонстрации работы компоненты.
	Скопируйте turbobl.dll в bin 1С, и откройте базу.
	Понажимайте на кнопочки, запускающие разные тесты.
	В колонке "До" будет отображатся время выполнения (мсек) каждого теста.
	Нажмите кнопку "Загрузить TurboBL".
	Снова позапускайте тесты.
	В колонке "После" отобразится новое время выполнения каждого теста.
	Почуствуйте разницу!
	После загрузки TurboBL, можно нажать "Работа с модулями". Открывшаяся
	обработка продемонстрирует некоторые особенности при вызове методов
	модулей.

СОВМЕСТИМОСТЬ С 1С++ v1.5.0.3
	Для автоускорения ГрупповыхКонтекстов и возможности обращения к методам
	модуля, TurboBL перехватывает ту же функцию 1С, что и 1С++ v1.5.0.3 для
	работы препроцессора в модулях конфигурации.
	Поэтому, та компонента, которая будет загружена позже, та и будет делать
	свое дело. Если сначала загрузить TurboBL, затем 1С++, не будет работать
	вызов методов модуля через контекст, если наоборот, не будет работать
	препроцессор в модулях конфигурации.
	Скорее всего, функционал TurboBL будет включен в следующие версии 1С++.

БЛАГОДАРНОСТИ
	Выражаю глубокую признательность Дмитрию Гусеву aka Deb,
	за плодотворное сотрудничество и помощь в тестировании компоненты.
	
PS
Данная разработка не придерживается технологии Внешних Компонент.
"1С-Совместимо" нет и не будет.
Используйте на свой страх и риск.

ИСТОРИЯ ВЕРСИЙ
Версия 1.1.0.1
	- Радикально упрощено использование компоненты.
	- Добавлена возможность вызова методов модулей через контекст.
	- Добавлена проверка установленных компонент при загрузке.
	- Исправлены мелкие баги.