Текущая версия 1.1.0.2 Скачать
Что это История версий
ВК TurboBL
Автор: Александр Орефков

Назначение:
Ускорение вызова методов и обращения к свойствам объектов 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
    	    .......
    	
    СОВМЕСТИМОСТЬ С 1С++ v1.5.0.3
    Для автоускорения ГрупповыхКонтекстов и возможности обращения к методам модуля, TurboBL перехватывает ту же функцию 1С, что и 1С++ v1.5.0.3 для работы препроцессора в модулях конфигурации.
    Поэтому, та компонента, которая будет загружена позже, та и будет делать свое дело. Если сначала загрузить TurboBL, затем 1С++, не будет работать вызов методов модуля через контекст, если наоборот, не будет работать препроцессор в модулях конфигурации.
    Функционал TurboBL включен в 1С++ версии 1.6.0.0
    Версия 1.1.0.2
    • Исправлена ошибка потери возвращаемого значения из функции, вызываемой через Контекст
    • Исправлена ошибка, приводящая в определенных ситуациях к вылету 1С
    Версия 1.1.0.1
    • Радикально упрощено использование компоненты.
    • Добавлена возможность вызова методов модулей через контекст.
    • Добавлена проверка установленных компонент при загрузке.
    • Исправлены мелкие баги.

    1C:TOP-100 Рейтинг ресурсов 1С