]>

# Внешняя компонента 1С++

1C++ :: | | Ранее: | Далее:

:: :: _1cpp_main_ 1С++

Содержание

- ООП
- Прямой доступ к базе данных
- Дополнительные классы и ЭУ
- TurboBL
- Учебник
- Прочее
  - History
  - Рекомендуемая дополнительная литература
  - Информационная поддержка проекта
  - Благодарности
  - Разработчики
  - Генеральная Общедоступная Лицензия GPL

Версия 2.5

Свободно распространяемая программа с исходным текстом. Условия использования, распространения - Генеральная Общедоступная Лицензия GPL.

1C++ - внешняя компонента для программы "1С-Предприятие 7.7"

Предназначена для расширения возможностей этой программы.

# ООП

1С++ позволяет применить принципы ООП при программировании на встроенном языке 1С-Предприятия.

- Реализация ООП в 1С++|_1cpp_oop_

# Прямой доступ к базе данных

1С++ позволяет организовать обращение к базе данных напрямую, минуя штатные средства 1С. Поддерживается возможность работы через интерфейс ODBC и OLEDB.

Для баз данных формата SQL возможна работа через ODBC в "родном" соединении 1С, те в том, которое использует сама 1С. Это позволяет использовать прямой доступ и в монопольном режиме работы.

Для DBF баз возможна работа только в немонопольном режиме. В режиме ODBC рекомендуется использовать для этого "Visual FoxPro ODBC driver", в режиме OLEDB - "Visual FoxPro OLEDB Provider 9.0".

- Прямой доступ через ODBC
- Прямой доступ через OLEDB

# Дополнительные классы и ЭУ

Дополнительные классы и элементы управления расширяющие функционал 1С V7.

- Дополнительные классы|_1cpp_ext_classes_

# TurboBL

Ускорение вызова методов и обращения к свойствам объектов 1С-Предприятия 7.7
Обращение к методам и переменным модулей через Контекст

- TurboBL|_1cpp_TurboBL_

# Учебник

В этом разделе будут публиковаться различные статьи посвященные использованию копоненты. В статьях рассматриваются ньюансы использования объектов компоненты. Авторы компоненты рекомендуют эти статьи как хорошее учебное пособие.

# Прочее

## History

    #########################################################################################
    Версия 2.5.0.0

    	- не всегда работала синтакс-проверка внешних обработок;
    	- неверно работала директива препроцессора "_NOW_PREPARE_CLASS"
    	- был возможен баг, когда при исключениях выдавался текст предыщего сообщения об исключении

    Класс "BinaryData"
    	- Исправлен метод CopyTo, который работал неправильно при размере файла меньше COPYTO_BUFFER_SIZE

    Класс "АктивИкс"
    	- устранены утечки памяти
    	- исправлен баг - обработчик события, который является первой функцие/процедурой в форме, не работал.
    	- добавлена отрисовка контейнера цветом BTNFACE при наличии в нем контрола
    	(для контролов, самостоятельно управляющих своим размером)
    	- исправлено несколько багов, приводивших к падению 1С
    	- добавлена возможность создания АХ контролов на кнопке и получения фокуса фокуса при обходе по Tab'у
    	- добавлено изменение размеров АХ-контрола вместе с родительским контролом
    	- добавлено отображение контейнера при отсутствующем контроле
    	- исправлен баг http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2685
    	- исправлен баг: не для всех ЭУ метод УстановитьФокус отрабатывал правильно.
    	- исправлен баг: не вызывались формулы элементов диалога и не переносились значения реквизитов из ЭУ на форме при получении контролом фокуса и др. событиях

    Классы по работе с OLEDB
    	- если у метода OLEDBData::Соединение первый параметр не указан,
    	используется строка подключения к базе ИБ по умолчанию
    	- устранены некоторые утечки памяти

    ТурбоБЛ
    	- реализован метод группового контекста __ВызыватьМетодыКакСобытия
    		(__CallMethodsAsEvents)
    	- не всегда работало автоускорение внешних обработок
    	- исправлена работа с #ЗагрузитьИзФайла

    Класс "Форма"
    	- новый метод "СоздатьЭлементУправленияНаФорме";

    Класс "ФабрикаОбъектов"
    	- новый метод "Новый"
    		для возможности создания объектов произвольных типов
    		с вызовом произвольных конструкторов с любым числом параметров.
    	- исправлен баг - при создании встроенных объектов 1С++ через ФабрикуОбъектов
    		(например, Фабрика.Шрифт("Arial", 10, 1))
    		была утечка памяти - на созданный объект создавалась лишняя ссылка

    Класс "ВыполняемыйМодуль"
    	- новые методы
    		"ВыполнитьПроцедуруКонтекста"
    		"ВыполнитьМетодКонтекста"
    	- исправлен баг с вылетом при рекурсивном вызове методов класса "ВыполняемыйМодуль"
    	- исправлен баг - в методе "ВыброситьИскл" не учитывался второй параметр

    Класс "MetaDataWork"
    	- новый метод "ИДЗначенияПеречисления/GetEnumAttributeID"
    	- исправлено падение(зависание) при попытке
    	загрузки MD-шника с паролем из сеанса, в котором MD-шник не имеет пароля,
    	и наоборот.

    Класс "Система"
        - новый метод "фРез = ЗакрытьФорму(КонтекстФормы, ФлагЗапросаСохранения = 0)"
            вызывает немедленное закрытие  формы,  все  соответствующие
            системные события отрабатывают  и  после  этого  управление
            возвращается в вызывающий код.
            В случае удачи возвращается 1, иначе 0
            Последний параметр не обязателен,  по умолчанию = 0
    	- новый метод " Уснуть / Sleep "

    Новый класс "Перехватчик" - служит для перехватов событий 1С
    	- метод "ПерехватитьСобытияГК"
    		1) перехват всех событий,
    			которые посылаются от 1С к открытой форме (ПриОткрытии, ПриЗакрытии, ПриЗаписи и т.д)
    		2) перехват всех событий FormEx, которые также посылаются форме (ПослеОткрытия и др.)

    	- метод "ПерехватитьСобытияГлобальногоМодуля"
    		возможность перехвата событий глобального модуля, в т.ч. и событий FormEx

    	- Если настройка "ПерехватитьСобытияГК" выключена,
    		методы КОП::ПерехватитьСобытияГК и Перехватчик::ПерехватитьСобытияГлобальногоМодуля
    		будут выдавать исключение

    	- Обработчик события в объекте-класса КОП ищется не только по имени,
    		но и по префиксу "Событие_НаименованияСобытия";
    	- Возможность получения объектов-обработчиков событий глобального модуля и/или конкретной формы
    		метод "ПолучитьПерехватчикСобытийГК" и "ПолучитьПерехватчикСобытийГлобальногоМодуля"

    	- Возможность вызова оригинального обработчика события из глобального модуля
    		"Перехватчик::ВызватьОригинальноеСобытиеГлобальногоМодуля(ИмяСобытия, СписокАргументов)"
        -  Возможность вызова оригинального обработчика события группового контекста
    		"ВызватьОригинальноеСобытиеГК(КонтГК, ИмяСобытия, СписокАргументов)"
        - Возможность снять перехват событий группового контекста или глобального модуля
    		"СнятьПерехватСобытийГK(КонтФормы)"
    		"СнятьПерехватСобытийГлобальногоМодуля()"

    Новый класс "Информатор" - служит для получения различной справочной информации
    	- методы
    		 "ПолучитьТаблицуМетодов/GetMethodsTable(Объект)"
    		 "ПолучитьТаблицуСвойств/GetPropsTable(Объект)"
             "МетодСуществует/HaveMethod(Объект, ИмяМетода)"
             "СвойствоСуществует/HaveProp(Объект, ИмяСвойства)"
    		 "ЯвляетсяОбъектом(ПроверяемыйОбъект, ТипНаКоторыйПроверяем)"
    		 "ЯвляетсяФункцией(Объект, ИмяМетода)"
    		 "КоманднаяСтрока()"
    		 "ПутьПриложения1С()"
             "ТипЗначенияСтрВнутр" - получить внутренний тип значения (из RuntimeClass).
             	Т.к.  для  объекта  "Регистры"  встроенный  ТипЗначенияСтр
             	выдает "НеизвестныйОбъект". А данный метод - "CAllRegsContext"

    Классу "РаботаСРегистромWin" добавлены новые, более читаемые синонимы
    		"RegistryWin"
    		"РеестрWin"
    	- Исправлена ошибка в методе "ОткрытьКлюч / СоздатьКлюч" - не всегда возвращалось значение 0 в
    		 случае ошибки

    Класс "ПоставщикДанныхЖурналРегистрации":
    	- просмотр архивов, созданных из "Монитора", при установленном периоде.
    	- добавлено свойство ТипыСобытий (см. документацию)
    	- добавлено свойство Отбор (см. документацию)

    Значительно ускорено объектов "ТаблицаЗначений" и "СписокЗначений"

    ODBC:
    	[!] устранен memory leak при загрузке рекордсета в ИТ (в методе ВыполнитьИнструкцию())

    ТП:
    	[!] обновлен ODBC провайдер
    	[!] добавлена отработка флагов доступности/видимости контрола при создании ТП

    	[+] добавлено событие ПриУничтожении/OnDestroy - вызывается при уничтожении контрола
    	    с которым связано ТП, но само ТП еще не уничтожено
    	[+] добавлен скроллинг ТП при помощи мыши
    	[+] добавлена типизация полей данных ТП (свойство Типизация поля данных ТП)
    	[+] добавлен метод ТП RedrawRows() /ПерерисоватьСтроки() для обновления видимой части ТП
    	    с вызовом события ПриВыводеСтроки, но без обращения к провайдеру
    	[+] добавлено свойство ТП ShowHeaders /ОтображатьЗаголовки
    	[+] добавлен метод ТП SetTextMargins() /УстановитьОтступы() для управления
    	    отступами текста в пределах ячейки и общей высотой строки ТП
    	[+] добавлено события ПриНачалеБыстрогоПоиска /OnQuickSearchStart, которое вызывается
    	    до создания окна QS, позволяет управлять разрешением на создание окна QS
    	[+] добавлено событие ПриБыстромПоиске /OnQuickSearch, вызывается до запуска системной
    	    процедуры быстрого поиска и позволяет организовать custom варианты QS
    	[+] добавлены свойства ТП ЦветТекста /TextColor и ЦветФона /BackColor
    	[+] добавлен вариант изменения ширины колонок при нажатой клавише SHIFT
    	    (изменение ширины выбранной колонки при сохранении размера остальных)
    	[+] добавлен метод Отладка() /Debug() поставщика данных ODBC
    	[+] в событии Выбор() добавлена возможность использования метода
    	    СписокЗначений::ВыбратьЗначение() с подстройкой меню и списка под текущую ячейку ТП
    	[+] добавлен метод ТП ПолучитьГраницыТекущейЯчейки() /GetCurrentCellBounds()

    	[-] исправлен баг с активацией мышью при активном окне подсказки ячейки
    	[-] исправлено избыточное обновление формы при активации строки
    	[-] исправлен быстрый поиск по первой колонке (ПоставщикДанныхТЗ)
    	[-] найдены потерянные скобки в механизме доп. условий быстрого поиска
    	    http://www.1cpp.ru/forum/YaBB.pl?num=1166006473
    	[-] исправлен вылет в событии ПриУничтожении для модальных форм

    Класс "ИндексированнаяТаблица"
    	[+] В методах Загрузить(), Выгрузить(), Объединить() добавлена возможность явного указания
    	    участвующих колонок источника
    	[+] Добавлен метод КоличествоИндексов() / IndexCount() - количество индексов в таблице
    	[+] Добавлен метод ИмяИндекса() / IndexName() - имя индекса
    	[+] Добавлен метод ВыражениеИндекса() / IndexExpr() - индексное выражение
    	[+] Добавлен метод НомерИндекса() / IndexNumber() - номер индекса
    	[+] Добавлен метод СохранитьИтератор() / SaveIterator()
    	[+] Добавлен метод ВосстановитьИтератор() / RestoreIterator()

    	[*] Устранена двойная индексация в методе Объединить()

    	[-] Исправлена ошибка в методе в варианте ИзФайла(<ИмяФайла>, 2): неверно читались даты вида 01.01.08
    	[-] Исправлена индексация справочников по представлению
    	[-] Исправлена индексация строк с обрезкой пробелов
    	[-] Исправлено потенциально некорректное итерирование по неуникальным индексам (тестБлуждающийИтератор)

    	[-] Исправлено падение при выгрузке в файл
    	[-] Исправлено: метод КоличествоЗначенийКлюча() возвращал -1 вместо 0, когда
    		в таблице нет ни одной записи с заданным ключом.
    	[-] исправлена ошибка чтения пустой даты
    	[-] исправлена запись дат, с годом < 2000. Теперь всегда пишется 4 цифры года.

    Исправлен баг - при загрузке в базе без справочников при загрузке 1С++ падала 1С

    КОП:
    	Добавлено - если в метод "КОП::_ВыброситьИскл" передается строка,
    	в случае появления сообщения об ошибке в окне сообщений будет выдана эта строка

    	Исправлена поддержка методов с неопределенным числом параметров (в том числе > 30)

    	Исправлен баг при создании объекта с базой несуществующего класса
    		в блоке Попытка-Исключение

    	Исправлено - при множественном наследовании и ошибке в конструкторе не первого класса
    		возникала утечка памяти;

    	- теперь отладка классов возможна без использования в классе
    		строки "Форма.Параметр._ПриОткрытии"
        -  теперь  форму  отлаживаемого  класса  пользователь   вручную
        закрыть не может. Форма будет закрыта  только  при  уничтожении
        данного объекта.

    	- При возникновении синтаксической ошибки или ошибки выполнения в классе, реализованном в виде
    	ert-файла, двойной клик по строке с сообщением об ошибке приведет к открытию
    	этого ert-файла в конфигураторе и переходу к строке с ошибкой. Как и для любого внешнего отчета в 1С.
        Для классов, реализованных в текстовых файлах, для  открытия  в
        Конфигураторе по двойному щелчку в окне сообщений,
        необходимо использовать спец.скрипт для Опенконф-а

    	Исправлена ошибка:
        	Неверны работали методы ПолучитьБазовыйКласс/ЗаменитьБазовыйОбъект
        	в модуле объекта-предка

    	Исправлена ошибка:
    		1С могла падать при удалении потомка раньше, чем его предка

    	Исправлена ошибка:
    		- исключения, возникшие в деструкторе класса, не передавались дальше в вызывающий модуль
            	Если в деструкторе класса возникает  исключение  вне  блока
            	Попытка-Исключение,  тогда  выбрасывается  исключение,   но
            	деструкторы всех соответствующих объектов вызываются (как и положено при исключениях)
    		- устранен баг с вылетом 1С, если в одном блоке встречаются
    		несколько объектов, в деструкторе которых выбрасывается исключение

    	Исправлена ошибка http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2556
    		- не работала замена базовых классов метаданных на групповые контексты форм этих метаданных
    		(например, Справочник, Документ и т.д)
    		- в методе "ЗаменитьБазовыйОбъект" не работала замена базы вида "Документ.Новый2"
    		на контекст модуля проведения или контекст формы документа

        Методы (устаревшие) "ОтправитьСообщениеМодулюХоз" и "ПолучитьКонтекстОкружения"
        сделаны безопасными.

        метод класса КОП "ПерехватитьСобытияГК" перенес в класс "Перехватчик"

    Класс   "MetaInfoClasses":
        - метод "ЯвляетсяОбъектом" теперь не выдает исключений в случае
        передачи пустых наименований, а возвращает 0
    	- новый метод "ОчиститьДанныеОптимизацииКлассов/ClearClassOptimizationData"
    		решение проблемы по сбросу оптимизации для классов КОП
    	- новый метод "ЗагрузитьОписаниеКлассов/ReadDefinesOfClasses"
    		динамическое подключение новых классов

    Метапарсер:
    	добавлено получение внутренних идентификаторов значений перечислений

    Класс "УправлениеНастройками"
        - новый метод "Установить(ИмяНастройкиПоАнглийскиИлиПоРусски, Значение0или1)"
    	- новый метод "Сбросить(ИмяНастройкиПоАнглийскиИлиПоРусски)"
    	- новый метод "Включить(ИмяНастройкиПоАнглийскиИлиПоРусски)"
    	- метод "Получить" теперь понимает и русские наименования
    	- Ключи для настроек
    		"EnabledCheckType" или "Проверка типов"
    		"EnableOptimizate" или "Оптимизация"
    		"EnableDebugging"  или  "Отладчик" или "Отладка"
    		"EnableTableSourceTable" или "ТаблицаИсходнаяТаблица" или "Таблица.ИсходнаяТаблица"
    		"EnableTurboBL" или "TurboBL"
    		"EnableHookEventsGroupContext" или "ПерехватитьСобытияГК"

    	- Исправлены баги:
    		- при переустановке настроек 1С++ 1С могла падать.
    		- при переустановке настроек 1С++ настройки в реестре сохранялись не сразу, а только после завершения сеанса 1С;
    		- не работала установка настроек через УправлениеНастройками.Включить(ИмяНастройки);

    Перехваты методов 1С, используемые для работы
    	ТурбоБЛ,
    	Таблица.ИсходнаяТаблица,
    	КОП.ПерехватитьСобытияГК
    	сделаны опциональными (спец.ключи).
    	Выключение данных хуков произойдет только после перезагрузки 1С

    Решение проблемы совместимости с FormEx - при использовании спец.метода CBLModule7::EvalDebugExpr

    #########################################################################################
    Версия 2.0.3.1

    Метапарсер:
    	исправлена ошибка: http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2518
    	$ГрафаЖурналаРасчетов работала не правильно

    ODBC:	http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2523
    	исправлена типизация при выполнении метода ВыполнитьСкалярный()
    	Строка->Число; Число->Строка; Строка->Дата

    КОП:
    	- Имена файлов классов КОП могут быть написаны с кавычками
    	- Добавление загрузки модулей классов из dll
    	- Устранена невозможность обращения к методам и свойствам формы группового контекста через контекст класса,
    		для которого базовым классом является данный групповой контекст.
    	- [bug 2513]
    		методы "ЗаменитьБазовыйОбъект", "ПолучитьБазовыйОбъект" не всегда работали верно.
    		Также исправлены сопутствующие баги 2512 и 2515
    	- [bug 2505]
    		Исправлено: В режиме отладки классов не работала
    		директива препроцессора _NOW_PREPARE_CLASS для классов,
    		которые одновременно являются и классом, и внешней обработкой.
    	- Исправлены ошибки, возникавшие при компиляции модулей классов при
    		включении/отключении оптимизации.
    	- Устранена невозможность обращения к методам и свойствам формы группового контекста через контекст класса,
    		для которого базовым классом является данный групповой контекст.
    	- Добавление загрузки модулей классов из dll
        - решена проблема потери памяти в КОП  при  работе  с  базовыми классами

    Новый класс "УправлениеНастройками"
    	- пока есть методы
    		"Получить(ИмяНастройкиПоАнглийски)"
    		"Состояние(ИмяНастройкиПоАнглийски)"

    Класс "Система"
        - добавлен метод  "КоманднаяСтрока"  для  получения командной строки запуска 1С
    	- добавлен метод  "ПутьПриложения1С"

    Дополнения в TurboBL
    	- Добавлено автоматическое ускорение контекстов внешних отчетов.
    	- Исправлено обращение к шаблонам таблиц в форме при вызове функций модуля через контекст.
    	- Оптимизировано обращение к полям ТаблицыЗначений.

    Исправления в OLEDB:
    	- Исправлена ошибка, при выполнении запросов к MSSQL - результат запрос не возвращался;
    	- Исправлена ошибка типизации колонок $Справочник и $Перечисление;
    	- Косметические исправления;

    Возвращаем на место _ATL_STATIC_REGISTRY

    Изменения в классе ИндексированнаяТаблица:
    	- Оптимизация индексов по строкам
    	- Поддержка NLS сортировки по строкам для всех языков
    	- Оптимизация процедуры выгрузки в ТЗ на форме
    	- Поддержка уникальных итераторов. Методы, поведение которых изменилось:
    		- КоличествоСтрок()
    		- ВыбратьСтроки()
    		- ВНачало()
    		- ВКонец()
    		- Выгрузить()
    	- Возможность получения результата методов Пересечение() и Разность() по одной ТЗ
    	- Добавлен метод ПереименоватьКолонку()
    	- Исправлена ошибка в методе Объединить() - не перестраивались индексы
    	- Исправлена ошибка в методах Выгрузить() и Загрузить() - методы не работали с контекстом формы документа

    Добавлен быстрый поиск в Табличное Поле с поставщиком данных ТЗ

    Исправлен баг bug 2395 - Для класса "РаботаСРегистромWin" метод ТипЗначенияСтр() возвращал неверную инфу

    Исправлен баг 2268 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2268]
    	Исправлено падение 1С при работе с классом,
    	у которого в качестве предка выступает групповой контекст.

    Исправлен баг 2174 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2174]: при удалении строк могли нарушаться индексы

    FormEx: Исправление бага [2258]
    FormEx: Исправление бага [2171]
    FormEx: Исправление отключения Shift + F4 на форме с деревом
    FormEx: Исправление отрисовки меню метода Сервис::ВыбратьЗначение при отсутствии открытых дочерних окон.
    ActiveX: исправлен баг с изменением размера контрола
    FormEx: исправление производительности таблиц (объект Таблица от 1С)
    FormEx: Метод ИсходнаяТаблица() проверен и исправлен в соответствие с документацией FormEx
    FormEx:	Новый метод: Сервис::ПолучитьСписокПользователей() для получения
    			списка пользователей базы в виде СпискаЗначений
    FormEx:	Окна::РазмерОкна: убрано центирование для немодальных окон.

    ТабличноеПоле: исправление работы таких методов как АктивизироватьОбъект() в процедурах событий табличного поля;

    Добавлена возможность загрузки метаданных из любой ИБ 1С.
    Для этого добавлены методы:
    	- ODBCDataBase::ПрисоединитьИБ
    	- MetaDataWork::ПрисоединитьМД
    	- OLEDBData::ПрисоединитьИБ

    Добавлен синоним метода ODBCDataBase::Присоеденить1С - ODBCDataBase::Присоединить1С.

    	Исправление в MetaDataWork:
    	- методы ПолучитьДобПериод, ПолучитьНачПериодаДляРег, ПолучитьКонПериодаДляРег
    	  вызывали исключение при передаче в качестве соответствующего параметра индекса оборотного регистра.

    	Решение бага 2291 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2291]
        Исправлено падение 1С при использовании циклической иерархии классов.

    	Решение бага 2216 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2216]
        Исправлено падение 1С при повторной загрузке (ЗагрузитьВнешнююКомпоненту("1cpp.dll"))
        или подключении (ПодключитьВнешнююКомпоненту("Addin.1C++")).

    	Решение бага 1605 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=1605]
    		[+] появилась возможность задавать //include defcls.prm
    		относительно папки текущего разбираемого defcls.prm;
    		Если задан относительный путь, он сначала проверяется относительно каталога ИБ,
    		а уже затем относительно папки текущего разбираемого defcls.prm;
    		[+] появилась возможность задавать в пути к файлу класса или defcls.prm в //#include
    		относительные пути с использованием "." или "..";

        Решение бага 1821 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=1821]
    		[+] появилась возможность наследовать метод "_ПолучитьКод()"
            Если в классе-предке метод описан с модификатором "Экспорт",
            данный метод наследуется.
            Если  модификатор  "Экспорт"  не  установлен,  метод  будет
            использован  только  в текущем классе, и не будет унаследован.

    Общие объекты:
    	- Исправление "непоказа" закладки на странице в окне "О программе" если не загружена account.dll
    	- Переделка отображения ракладки и времени в строке состояния
    	- Исправление инициализации дополнительных панелей строки состояния
    	- Решена проблема падения при использовании Форма::СоздатьЭлементУправления() в модальной форме.
    	- исправлены ошибки при сохранении/восстановлении параметров компоненты;
    	- изменено поведение метода BinaryData::Размер в соответствии с пожеланиями трудящихся -
    		при получении размера положение внутреннего указателя не меняется.
    	- Класс "MetaInfoClasses": новый метод "ПолучитьВерсиюФайла" (англ. "GetFileVersion")
            Синтаксис:
                Строка ПолучитьВерсиюФайла( Строка ПутьКФайлу = "",
            								Строка ВерсияФайла = "FileVersion")
            Назначение:
            Получает версию из VERSION_INFO ресурса файла. Можно
            использовать для получения версии  1С++,  в  т.ч  и  ночной
            сборки.
    	- Удален объект "Поток"
        - КОП:
        	Исправлен баг 2128 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2128]
        		Ошибка в методе класса при передаче параметра-строки со значением по умолчанию = ""
            Исправлен баг 1868 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=1868]
                Если  в  методе  в  строковом  параметре  по  умолчанию поставить "..."
                [ например, число Метод_3Точки_ВКонце(Строка Загол = "Введите дату...") ]
                возникал конфликт при вызове данного метода.
    		Исправлен баг 2152 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2152]
    			Не работала отладка для классов, встроенных в конфигурацию.
    		Исправлен баг 2259 [http://cvs.alterplast.ru/bugs/show_bug.cgi?id=2259]
                При определенных условиях метод "ПолучитьКонтекстОкружения" приводил
                к  падению  1С.  Сейчас  в  подобных  случаях  выдается
                исключение 1С.

    #########################################################################################
    Версия 2.0.2.1

    Глобальные изменения
    	Исправлена проблема с отсутствием интерфейса IInitDone при запуске 1С без прав
    	локального админа и несовпадении пути регистрации и пути загрузки компоненты

    	Доработано ускорение контекста, в т.ч. и для внешних отчетов, на базе методов ТурбоБЛ
    		1) есть возможность обращаться к переменным и методам любой формы напрямую (TurboBL)
    		2) самое главное, для внешних отчетов больше нет необходимости создавать объект "УскорительГК"
    		в модуле внешнего отчета. Этот код выполняется автоматически при открытии формы внешнего отчета.

    	Для всех КОП
    	1. Добавлено:
    		1. более читабельный метод "ЗаменитьБазовыйОбъект" (ReplaсeBaseObject) - синоним ЗаменитьЭкcзБазовогоКласса
    		2. Новый встроенный метод для КОП  "ЯвляетсяОбъектом" (англ. "TheClassIs")
    		3. Добавлены синонимы (recommended / deprecated):
    		- ЗаменитьБазовыйОбъект (ReplaсeBaseObject) / ЗаменитьЭкcзБазовогоКласса (ReplaceInstBaseClasses)
    		4. Добавлена возможность наследовать классы напрямую от "ГрупповойКонтекст"
    			т.е. можно написать в файле defcls.prm
    			class НаследникГрупповойКонтекст = НаследникГрупповойКонтекст : ГрупповойКонтекст
    			{}
                но для корректной работы класса необходимо использовать
                вызов ЗаменитьБазовыйОбъект("ГрупповойКонтекст", КонтекстОткрытойФормы);

    	2. Исправлено:
    		Тип класса равен тому, что написал разработчик в файле описания класса,
    		а не так, как пользователь напишет в СоздатьОбъект(ТипОбъекта) [bug 2021]

    		[-] исправлен баг 2023 - в методе "ОтправитьСообщениеМодулюХоз" - [bug 2023]
    		не удавалось получить возвращаемое значение от обработчика события в модуле-хозяине;
    		[-] в методе "ОтправитьСообщениеМодулюХоз" - если в модуле-хозяине нет обработчика "ОбработкаСобытияОтКласса",
    		выдается исключение

    		[+] Метод Структура::Удалить() выдает исключение, если переданного
    		ключа в структуре не существует. [bug 2103]

    Исправления в OLEDB:
    	- При укладывании одноуровневого справочника методом УложитьСписокОбъектов()
    	  выбрасывалось исключение;
    	- Изменил поведение метода УложитьСписокОбъектов() - теперь указывать каталог временных таблиц
    	  не обязательно (!). Если каталог не указан, то временные таблицы создаются в каталоге ИБ;

    Общие объекты:
    	- Изменено поведение метода BinaryData::ЗагрузитьИзФайла если объект был подключен к файлу, данные
    	  загружаются в файл;
    	- добавлены методы класса BinaryData::Zip/Unzip.
    	- Ключи объектов Структура и Делегат сделаны регистронезависимыми
    	- Добавлены параметры в ВыполняемыйМодуль::GetMethOfContext для получения описаний в ТЗ.
    		Есть возможность получать данные о методах и процедурах для любого группового контекста,
    		в т.ч. и для контекстов внешних отчетов.
    	- Рефакторинг класса 'Делегат'
    	- Класс "MetaInfoClasses": новый метод "ЯвляетсяОбъектом" (англ. "IsObject")
    	- Класс "MetaInfoClasses": новый метод "ПолучитьИменаБазовыхКлассов" (англ. "GetBaseClasses")
    	- Класс "ВыполняемыйМодуль": новый метод "КомпилироватьИВыполнитьМодуль"
        - Класс "ВыполняемыйМодуль": новый метод "РазрешитьИсключения" ("EnableExceptions")
    	- Добавлен класс "Math"
    	- Добавлен класс "Поток", аналогичный классу из ВК Vtools
    	http://vtools.ru/vtools2.htm#35

    Изменения в Табличном поле:
    	- добавлена поддержка механизма Drag&Drop;
    	- изменено создание: теперь через СоздатьЭлементУправления("ТабличноеПоле") метод СоздатьТабличноеПоле() удален;
    	- доработка механизма контекстного меню;
    	- устранена ошибка в механизме быстрого поиска;
    	- в событии контекстного меню теперь есть признак заголовка (клик на заголовке колонки);
    	- поддержка ООП: отображение событий в методы наследника от объекта ЭУ.
    	- англоязычные синонимы событий;
    	- Метод ПоставщикДанныхODBC::УстановитьТекущуюСтроку больше не используется, его функционал берет
    	  на себя свойство ТабличноеПоле::ТекущаяСтрока;
    	- утвержден и опубликован программный интерфейс для разработки новых поставщиков данных;
    	- Новое свойство ТабличноеПоле::ТекущаяСтрока;
    	- Поставщик данных ODBC может иметь как текстовые так и SQL параметры;
    	- оптимизирована работа Поставщика данных ODBC, он использует параметризированные запросы.
    	- устранение критической ошибки на win98;
    	- Отработка авто цвета, запрет измененения позиции колонок, цвет линий, цвета выделения,
    	  чередование строк, программный сдвиг колонок, запрет изменения видимости колонки;
    	- Добавлен метод Сдвинуть() для коллекции колонок, исправлен баг отрисовки при восстановлении
    	  видимости колонки;
    	- Отрисовка фокусной рамки в режиме выделения всей строки;

    Исправления в ODBC:
    	- устранена ошибка не работала типизация строк следующими именами: $ВидРасчета, $ВидСубконто, $Субконто;
    	- устранена ошибка ODBCRecordset получение типа float (double) происходило округление до целого;
    	- устранение ошибки УложитьСписокОбъектов не закрывал за собой запрос;
    	- новая реализация УложитьСписокОбъектов в алгоритме обработки иерархического справочника;
    	- устранение ошибки при получении длинных полей (не получались);
    	- устранение ошибки в ВЗ $ПоследнееЗначение неправильно работало при типе реквизита Дата;
    	- модификаторы не используются для SQL параметров, все определяется SQL типом параметра
    	  в методе ODBCRecordset::ДобПараметр;
    	- комплексные изменения движка прямых запросов;

    Исправления в классе ИндексированнаяТаблица:
    	Исправления:
    	- Ошибка удаления колонки - не изменялся внутренний номер оставшихся колонок
    	- В методах ВыбратьСтроку()/Показать() - неправильно заполнялись параметры по умолчанию.
    	- В методе Группировать() имена колонок сумм не проверялись на допустимость.
    	- Методы НайтиСтроку(), НайтиБлижайшуюБольше(), НайтиБлижайшуюМеньше() всегда
    	  позиционировались на найденную строку, незваисимо от параметра чСпозиционироваться.
    	- Методе Пересечение() давал неверные результаты.
    	- Исправлена ошибка установки подмножества по индексу с сортировкой по убыванию
    	- Методы ЗаполнитьКолонку(), Выгрузить(), ВФайл(), ВСтроку() сбрасывали
    	  текущую позицию в выборке.
    	- В методе Подмножество() неверно заполнялись значения фильтра.
    	- Исправлено падение 1С при фильтре, в который не попадает ни одна строка.
    	- Исправлено падение 1С при выборках на пустой таблице, что также приводило к падениям и в группировке.
    	- Методы НайтиСтроку(), НайтиБлижайшуюБольше(), НайтиБлижайшуюМеньше()  всегда позиционировались
    	  на найденную строку, незваисимо от параметра чСпозиционироваться.

    	Новое:
    	- В методе Группировать(), при подсчёте сумм по группам справочников, проверяется наличие
    	  колонки <ИмяКолонкиСправочника>_Родитель. Если такая колонка есть, то родитель берётся из неё.
    	- В методе Группировать() с итогами по группам справочника в результирующую таблицу добавляется
    	  колонка __ЭтоГруппа__.
    	- В методе Группировать() количество обращений к базе сокращено до минимума.
    	- В метод Группировать() добавлена группировка по датам. Группой считается начало месяца.
    	- Для фильтров добавлена возможность включать в выборку только уникальные значения
    	- Добавлен инверсный фильтр.
    	- Изменены параметры для метода показать - оставлен только индекс.
    	- Добавлен метод ЗагрузитьЗапрос().
    	- Добавлен метод Разность().

    #########################################################################################
    Версия 2.0.1.2

    Исправления в общей части:

    	- Если при выходе из 1С происходил вылет, то не сохранялись настройки компоненты.
    		Теперь настройки сохраняются сразу при изменении.

    	- Исправлена ошибка регистрации компоненты, возникавшая на некоторых системах.

    Исправления в OLEDB:

    	- Появился новый метод: УложитьСписокОбъектов (Объект, ИмяТабл, ВидСпр) / PutObjectList()
    		Параметры:
    		- Объект [in] - объект конкретного справочника;
    		- Имя [out] - возвращается имя и путь (абсолютный путь) временной таблицы;
    		- ВидСпр [in] - строка с названием вида справочника, не обязательна.
    			Если указать, то будет уложены все элементы справочника, начиная от Объект.
    			Если не указать, то будет уложен только один элемент Объект;

    	- Появился новый метод: УстановитьКаталогВремТаблиц(стрДир) / SetTempTablesDir(стрДир)
    		В нем указывается, где создавать временные таблицы.
    		Параметры:
    		- стрДир [in] - каталог, в котором будут создаваться временные таблицы.
    			Проверка на правильность пути классом не производится.

    	- Исправлена мелкая ошибка.

    Исправления в классе ИндексированнаяТаблица:
    	- Исправлена ошибка в методах поиска, приводившая к падению 1С.

    	- Исправлена ошибка в методе Итог(), приводившая к падению 1С.

    	- Исправлена ошибка удаления индекса по номеру.

    	- Добавлен метод ИтогПоДиапазону().

    	- Метод Загрузить() может загружать табличную часть документа и результаты
    	  выполнения запроса 1С (тип Запрос).

    	- Метод Выгрузить() может использоваться для заполнения табличной части документа.

    	- В метод Копия() добавлена возможность копировать только структуру таблицы.

    	- В методе Группировать() добавлена возможность считать итоги по группам справочников.

    	- Исправлено много мелких ошибок и недочетов.

    	- Проведена работа по экономии системных ресурсов.

    #########################################################################################
    Версия 2.0.1.1

    Исправления в классе ИндексированнаяТаблица:
    	- В класс ИндексированнаяТаблица добавлены методы ВСтроку() и ИзСтроки(),
    	  предназначенные для сериализации.

    	- Добавлен метод ЗаполнитьКолонку()

    	- в метод Выгрузить() добавлена возможность выгружать колонку в СписокЗначений.

    	- добавлен метод ВыбратьСтроку() и его синоним Показать().  Метод создаёт таблицу
    	  значений, выгружает туда содержимое текущей таблицы, и вызывает метод
    	  ТаблицаЗначений::ВыбратьСтроку(). Предназначен в основном для отладки.

    - В работе ТабличногоПоля исправлена ошибка, возникавшая при работе под управлением Win98.

    #########################################################################################
    Версия 2.0.1.0

    - В тексте запросов можно использовать метки. (после двоеточия должна быть не цифра не буква
      и не подчеркивание).

    - Устранена ошибка возникающаяя при использовании параметризированных запросов. State 24000
      Недопустимое состояние курсора.

    - Принята новая система версий.

    - Устранены проблемы с аппаратным DEP.

    - Добавлен встроенный класс ИндексированнаяТаблица, англ. синоним IndexedTable

    #########################################################################################
    Версия 1.8.1.7

    - ВыполняемыйМодуль::ПолучитьИнформациюОПроцедуре() получение информации о процедуре или функции.

    - Исправлена ошибка. СервисРасшФормы::ЭмулироватьКлавиатуру() не отрабатывал код клавиши NUMLOCK.

    - Восстановлено значение 0 флага стандартной обработки в процедуре ГМ ОбработкаЯчейкиТаблицы.

    - Новые объекты: ТаблиноеПоле, ПоставщикДанныхODBC, ПоставщикДанныхТЗ

    - Новые классы: OLEDBData (нет рус. синонима) и OLEDBCommand (нет рус. синонима)

    #########################################################################################
    Версия 1.8.1.6

    - Добавлена возможность хранить несколько классов в одном модуле. Для этого текст модуля
      каждого класса нужно начинать со строки "//# ClassBegin <ClassName>" и заканчивать
      строкой "//# ClassEnd <ClassName>", где вместо <ClassName> пишем имя класса.
      Пробелы имеют значение.

    - Исправлена ошибка. Флаг стандартной обработки при вызове процедуры ГМ ОбработкаЯчейкиТаблицы
      при входе в процедуру имеет значение 1.

    - BinaryData режимы открытия файлов.
      Исправлена ошибка: при чтении данных из 4 байт результатом могло быть отрицательное число.
      Теперь только положительное.

    - Оптимизировано создание объектов. Ускорена работа функции СоздатьОбъект().

    - Добавлена оптимизация: ВТ РегистрОбороты по оборотному регистру, если расчет идет по ТА, то
      не используется таблица движений.

    - Введены модификаторы для типа Документ: 3-ВидДокумента 4-ПозицияДокумента.

    - Добавлен новый метод: ODBCRecordset::УложитьСписокОбъектов13(СпОбъектов, ИмяВремТаблицы).

    - Поправлен метод ODBCRecordset::ReconnectNative.

    - MetaInfoClasses::ПолучитьВерсию() и страница свойств компоненты получают версию из VERSION_INFO
      ресурса загруженной dll.

    - Новый метод ODBCRecordset::РежимRPC(). Только для MSSQL. Переводит парсер в режим, в котором
      парсинг идет для выполнения запроса с помощью RPC вызова хранимой процедуры sp_executesql.

    - Несколько ускорен парсинг текста запроса.

    - Новые метаимена: $ПустойИД, $ПустойИД13.

    #########################################################################################
    Версия 1.8.1.5

    Изменения ODBCRecordset и иже с ним v. 2.12

    - Доработан метод ODBCRecordSet::ВыполнитьСкалярный(). Если в результате запроса отсутствовала
      строка, то для простых типов возвращаемое значение могло быть не пустым.

    - Доработан метод ODBCRecordSet::ВыполнитьИнструкцию(). Если в переданной таблице было больше
      колонок чем в результате запроса, происходило аварийное завершение программы.

    - Метод ODBCDataBase::ReconnectNative(). Решение бага MSSQL при вставке во временную таблицу
      при выполнении ХП sp_executesql. Переподкючает программу к серверу.

    - Имена КОП-ов, их методы и свойства регистронезависимы.

    - ODBCRecordSet::ExecuteStatement() Исправлена ошибка при передаче вторым параметром простого
      типа происходило аварийное завершение работы.

    - ODBCRecordSet. Метод для получения XML результата.

    - BinaryData. Работа с файлом в разделенном режиме. Добавлены методы работы с
      блокировками. Объект может чтение/запись строк в различных кодировках (ANSI,
      OEM, UTF-16(LE), UTF-8)

    - ODBCRecordSet. Доработано получение длинных строк в unicode (ntext).

    - Парсер запросов. Добавлено условие по флажку регистра в таблице журнала документов.
      В общем случае повышает быстродействие.

    Изменения ядра FormEx

    - новый метод CurrentTreeColumn/ТекущаяКолонкаДерева у объекта "Дерево+Таблица"

    - исправлена ошибка совместимости с PuntoSwitcher

    - исправлена ошибка с флагом стандартной обработки в процедуре ОбработкаЯчейкиТаблицы

    - исправлена ошибка невызова глобальных процедур обработки событий мыши и клавиатуры,
    если нет открытых форм

    - исправлена ошибка установки системного курсора (на изменение размеров) главного окна

    #########################################################################################
    Версия 1.8.1.4

    - доработка объекта "Дерево+Таблица"

    - у объекта "СервисРасшФормы" новый метод - КоманднаяСтрока()

    #########################################################################################
    Версия 1.8.1.3

    Изменения ODBCRecordset и иже с ним v. 2.11

    - Исправлена ошибка MetaDataWork::ЗначениеВСамуюДлиннуюСтрокуБД() формировала строковое
      представление длиной 15 символов, теперь 23.

    - Убран функционал КОП _StringView(), т.к. произошло дублирование функций с _getCode().

    - В реализации метаимени $ПоследнееЗначение изменен внутренний алиас на нечитабельный.

    - ODBCRecordset::ExecuteScalar(); если в результате запроса будет несколько полей,
      возвращается объект Структура заполненый соответствующим образом (если одно поле,
      возвращается его значение).

    - Исправлена ошибка. Новыми методами выполнения (ЕхecuteStatement и ExecuteScalar) было
      невозможно записывать длинные поля.

    - Исправлена ошибка. При использовании ODBCRecordset::ExecuteScalar() и
      параметризированном запросе, если в результате запроса получается пустая выборка
      возвращалось значение с прошлого выполнения.

    - баг-фикс части, касающейся FormEx;

    - получение списка принтеров, проверка состояния принтера;

    - управление видом курсора (можно устанавливать на реквизит формы, саму форму и на главное окно;
      естественно, везде можно разные курсору задавать);

    - управление цветом фона и шрифта реквизитов (работает не для всех типов реквизитов);

    - новый визуальный объект "дерево-таблица";

    - перехват списка значений (можно в реквизите "поле со списком" напрямую набирать с клавиатуры и
      список будет позиционироваться на соответсвующем значении);

    - сброс флага модифицированности формы;

    - получение координат левого-верхнего угла формы;

    - минимизация формы;

    - воспроизведение wav-файла;

    - получение списка открытых печатных форм с возможностью их последующей записи;

    - получение версии ОС;

    - обработка ожидания, работающая во всех режимах (даже при открытом модальном окне) с установкой
      периода вызова в миллисекундах;

    - загрузка дополнительных глобальных модулей директивой ЗагрузитьИзФайла.

    #########################################################################################
    Версия 1.8.1.2

    Изменения ODBCRecordset и иже с ним v. 2.10

    - Исправлена ошибка. При получении значения null в колонке типа datetime (SQL_C_TIMESTAMP)
      формировалось некорректное пустое значение типа Дата.

    - Новый функционал. Объекты типа КОП могут реализовать собственное представление
      в виде строки. Для этого КОП должен реализовать функцию "_StringView", которая
      должна вернуть строковое представление объекта.

    - Новый функционал. Типизация выборки типом КОП. Для этого необходимо:
      1)Использовать типизирующее имя "Класс" и имя класса, например
        "Спр.id [ОбъектТипаМойКОП $Класс.МойКОП]";
      2)В реализации класса должна присутствовать процедура с названием "_SQLCreate"
        (виртуальный конструктор), которая будет вызвана после создания объекта, указанного
    	в типизации класса; процедура должна иметь два или меньше параметров; в первом
    	параметре передается значение поля без типизации, во втором статический объект типа
    	MetaDataWork.
      3)в реализации _SQLCreate и конструктора объекта не должно быть обращения к БД на
        том соединении на котором в данный момоент происходит выборка (во избежание кофликта
    	локального курсора).

    - Переписана работа с длинными строками (SQL_LONGVARCHAR). Теперь возможна запись.

    - Новый объект "BinaryData". Позволяет работать с двоичными данными. Данные может
      содержать в памяти или на диске. Создание, чтение/запись данных через строку или целое
      число различной разрядности, сжатие/разжатие внутренним архиватором (zip), чтение/запись
      в БД (ODBC тип поля SQL_LONGVARBINARY).

    - Новый объект "GUID". Формирование нового, выгрузка/загрузка в строку, сравнение,
      чтение/запись в БД (ODBC тип поля SQL_BINARY(16)).

    - Исправлена ошибка. При типизации колонки именем $Дата, неправильно возвращался ее
      1С тип методом ПолучитьПараметрыПоля().

    - Исправлена ошибка. При типизации колонки агрегатным типом, если поле содержало строку
      длиной меньше минимально необходимой в результате могло получиться некорректное значение.

    - Добавлены методы ODBCRecordSet::ExecuteStatement() и ODBCRecordSet::ExecuteScalar().
      При ошибке в запросе формируют исключение. Обеспечивают получение результата запроса,
      закрывая курсор. ExecuteStatement() возвращает таблицу значений или количество
      обработанных строк. Время загрузки результата запроса в таблицу значений уменьшено на
      30-60%. ExecuteScalar()возвращает значение из первого поля первой строки результата,
      остальные данные игнорируются или количество обработанных строк.

    - При типизации колонки типа datetime именем $Строка возвращаются значения типа строка
      с каноническим представлением даты ODBC.

    - Для корректной отрисовки ЭУ текст, рамка, флажок, переключатель внесены изменения в
      FormEx.

    - Исправлена ошибка. Метод ODBCRecordSet::ВыполнитьSQL_ИзТЗ() не работал правильно при
      использовании подстроки в заголовке поля "?3" и "?*".

    - Исправлена ошибка. При получении полей типа Numeric в состоянии когда набор данных не
      спозиционирован на строке происходило аварийное завершение программы.

    - Новый метод ODBCRecordset::ОбратныйРасчетОтТА(). Разрешает оптимизацию расчета остатков
      от ТА.

    - Исправлена ошибка. ВТ РегистрОбороты по оборотному регистру. В случае когда периодичность
      оборотного регистра квартал или год происходил неправильный расчет итогов.

    - Исправлена ошибка. ВТ РегистрОбороты по оборотному регистру. В случае когда в ВТ
      передавался период выходяший за рамки периодичности итогов с обоих строн, и условие
      - формировался неправильный запрос и в выборку попадали лишние записи.

    - Исправлена ошибка. При типизации именем $Документ с использованием поля с суффиксом
      "_вид" и имененм $Субконто, и при размещении поля с суффиксом "_вид" первым в выборке,
      типизация не работала.

    #########################################################################################
    Версия 1.8.0.2

    Изменения ODBCRecordset и иже с ним v. 2.9

    - Новый функционал. Типизирующее имя $Субконто, для типизации полей - значений субконто,
      при этом в выборке должно находиться поле с именем, состоящим из имени
      типизируемого поля и суффикса "_вид", в зачении которого должен быть вид субконто.
      При этом в выборке в поле с видом субконто будут значения типа ВидСубконто.

    - Новый функционал. ODBCRecordset::УложитьСписокОбъектов() может создать временную
      таблицу счетов по иерархии плана счетов. Для этого нужно передать счет или
      СписокЗначений со счетами и идентификатор плана счетов.

    #########################################################################################
    Версия 1.8.0.1
    - Изменения ODBCRecordset и иже с ним v. 2.8

    - Исправлена ошибка. При соединении через драйверы для интерфейса ODBC API версии
      меньше 03.00, при получении чисел происходило аварийное завершение.

    - Исправлена ошибка. ВТ РегистрОбороты, в некоторых случаях игнорировались связи и
      условия.

    - Исправлена ошибка. При использовании ВТ РегистрОстаткиОбороты, в случае когда
      результат не перебирается до конца, и подается метод Закрыть() происходило
      аварийное завершение.

    - Исправлена ошибка. Не создавался объект SQLLock.

    - Код формирования запросов ВТ переписан на 80% все обращения к полям внутри
      запросов ВТ идут через алиасы таблиц. Это позволяет использовать в связях таблицы
      с именами полей, совпадающими с именами полей таблиц источников данных для ВТ.

    - Метод УложитьСписокОбъектов() при указании в третьем параметре вида справовника,
      который неопределен в конфигурации, происходило аварийное завершение, сейчас
      формируется 1С исключение.

    - В очередной раз поправлена работа с числами: если драйвер для ODBC API
      версии меньше 03.00 получение числа идет через строку, иначе если точность меньше
      или равна 9 получение идет через SQL_NUMERIC_STRUCT, иначе через строку.
      Т.о. при получении чисел из типа SQL_NUMERIC тип double не используется никогда.
      Однако, при установке SQL параметров используется тип double.

    - При включеной отладке, и параметризированном запросе не выводятся сообщения в
      методе Open()

    #########################################################################################
    Версия 1.8.0.0
    - Исправлена ошибка допущеная при внесении изменений в релизе 1.7.2.3, а именно:
      "В группу базовых методов классов: ПолучитьБазовыйКласс()/GetBaseClass() и НазначитьБазовыйКласс()/AssignBaseClass()
      добавлена поддержка английских синонимов объектов 1С, таких как Документы, Справочники, Регситр, Регситры,
      соответственно: Document, Reference, Register, Registers. Учет видов некоторых из этих объектов не изменился."
    - Исправлена ошибка, в некоторых случаях не работала АвтоТипизация
    - Добавлена возможность чтения полей строк с неограниченной длиной. ВНИМАНИЕ: запись строк с неограниченной длиной
      запрещена.

    Изменения ODBCRecordset и иже с ним v. 2.6

    - Исправлена ошибка. В методе ВыполнитьSQL_ИзТЗ() в ТЗ, в имени колонки числом
    можно указать модификатор, как и написано в документации.

    - Исправлена ошибка. При использовании набора строк (УстРазмерМножестваСтрок),
    в некоторых случаях неработала типизация.

    - Исправлена ошибка парсинга связей в виртуальных таблицах, случающаяся в
    некоторых случаях.

    - Переработано получение чисел из набора данных. До этого, для получения числа
    от драйвера ODBC использовался тип double, что в некоторых случаях приводило
    к потере точности (мантисса ограничена). Теперь, если десятичная_точность числа
    не превышает 9 знаков, формирование внутреннего числа 1С происходит без
    использования float арифметики. При этом, по некоторым оценкам, наблюдается
    повышение быстродействия на ~20%.
    Следует иметь в виду, что при получении чисел с точностью более 9 знаков
    все работает как раньше.

    - При типизации колонки выборки типом $Неопределенный, кроме агрегатных типов
    допустимо получать простые типы 1С (Число, Строка, Дата). Аналогично работает
    теперь метод MetaDataWork::ЗначениеИзДлиннойСтрокиБД().

    - MetaDataWork::ЗначениеИзСтрокиБД(). Может вернуть запись журнала расчета. Для
    этого необходимо первым параметром передать строку "ЗаписьЖурналаРасчета",
    вторым идентификатор журнала расчета, третьим, идентификатор записи ЖР в
    формате char(9). Соединение с SQL сервером должно быть свободно от открытых
    локальных курсоров.

    - Новый метод MetaDataWork::ЗначениеВСамуюДлиннуюСтрокуБД() позволяет для переданного
    значения получить строку которая хранится в базе данных в реквизите типа
    Неопределенный.

    - Новый метод ODBCRecordset::УстТаймаутЗапроса(<ТаймаутВСекундах>), устанавливает
    таймаут на выполнение запроса. Если выполнение не завершается до истечения таймаута
    выполнение методов ODBCRecordset::Выполнить() или ODBCRecordset::Открыть()
    завершается с ошибкой. Для проверки что запрос вывалился по таймауту, существует
    метод ODBCRecordset::ИстекТаймаут(), вызывать его нужно только после
    ODBCRecordset::ПолучитьОписаниеОшибки().
    Применяя это возможно решить проблему загрузки процессора при ожидании захвата таблиц,
    которая так актуальна в терминальных системах.

    - Новый объект SQLLock. Позволяет получать новые идентификаторы объектов, коды
    справочников, номера документов, которые можно использовать для образования новых
    записей в базе данных.

    - Добавлена возможность работы со значениями типа time (SQL_TYPE_TIME).
    Значение возвращается и устанавливается в виде строки с каноническим представлением
    времени (hh:mm:ss).

    - Добавлены типизируещие имена:
    ${Счет|Account}
    ${Счет|Account}.*
    ${ВидСубконто|SubcontoKind}
    ${ПланСчетов|ChartOfAccount}

    #########################################################################################
    Версия 1.7.2.3
    - В группу базовых методов классов: ПолучитьБазовыйКласс()/GetBaseClass() и НазначитьБазовыйКласс()/AssignBaseClass()
      добавлена поддержка английских синонимов объектов 1С, таких как Документы, Справочники, Регситр, Регситры,
      соответственно: Document, Reference, Register, Registers. Учет видов некоторых из этих объектов не изменился.

    - Исправлена ошибка в методе ODBCRecordset::ExeSQL_FromTV, не учитывался тип ссылочного параметра для
      обрабатываемой таблицы значений ?1, ?2, ?3. Исправлена документация в части описания данного метода.
      Вместо: "Заголовок должен содержать строку вида ?X в любом месте строки, где Х может принимать
      следующие значения: 0 - короткая строка (9 - символов), 1 - длинная строка (13 - символов),
      2 - супер длинная строка (15 символов)" следует читать: "Заголовок должен содержать строку вида ?X в
      любом месте строки, где Х может принимать следующие значения: 1 - короткая строка (9 - символов),
      2 - длинная строка (13 - символов), 3 - супер длинная строка (15 символов)"

    - Добавлена возможность препроцессора: в момент загрузки модулей из внешних отчетов как модуля класса,
      автоматически определяется символ препроцессора: _NOW_PREPARE_CLASS
      (аналогично строке кода //#define _NOW_PREPARE_CLASS)
      и отключался после того, как класс уже готов.
      (аналогично строке кода //#undef _NOW_PREPARE_CLASS)

    #########################################################################################
    Версия 1.7.2.2
    - При передаче переменного числа параметров методу класса, который описан как Число Получить(...);
      при вызове "Получить(0);" поведение внутри функции "получить" :
      Функция Получить()  Экспорт
        список = Сам(Контекст).ПолучитьСписокПараметров("Получить");
    //   после чего сразу же
    //   список.ПолучитьЗначение(1) возвращает  "" и
    //   ТипЗначенияСтр(список.ПолучитьЗначение(1)) возвращает "Строка"
      Исправлено на:
    //   список.ПолучитьЗначение(1) возвращает  0 и
    //   ТипЗначенияСтр(список.ПолучитьЗначение(1)) возвращает "Число"
      Также и со всеми остальными пустыми ссылочными (спавочники, документы, ...) типами данных, типом
      дата, которые превращались в "пустую строку"

    *************************************************************************************
    - Изменения ODBCRecordset и иже с ним v. 2.5

    - Виртуальные таблицы остатков, остатков и оборотов на распределенной базе
      данных могли выдавать неверные итоги.
      Исправлено: работают правильно.

    - Метод MetaDataWork::ПолучитьДобПериод(). Теперь работает для всех возможных
      значений периодичности сохранения итогов.

    - Типизация колонок выборки ODBCRecordset. Для типизирующего имени "$ВидРасчета"
      колонка может иметь три различных SQL типа:
        int - в журнале расчетов SQL формата ИБ;
        char(4) - в журнале расчетов DBF формата ИБ;
        char(13) - в остальных таблицах, где вид расчета содержится как реквизит.

    - Для параметра со значением типа ВидРасчета, определен модификатор с номером 2
      (~~), который обозначает, что в текст запроса будет подставлен литерал, тип
      которого будет соответствовать типу хранения в журнале расчетов, для текущего
      формата ИБ (SQL:int, DBF:char(4)).

    - Внимание! Изменена трансляция метаимени "$ВидДокумента.ХХХХХ". При SQL
      формате ИБ - литерал типа int, при DBF формате - литерал типа char(4) со
      значением идентификатора вида документа в 36-м формате.

    - Внимание! Изменена трансляция метаимени "$ВидРасчета.ХХХХХ". При SQL формате
      ИБ - литерал типа int, при DBF формате - литерал типа char(4) со значением
      идентификатора вида документа в 36-м формате.

    - Определено метаимя "$ВидДокумента36.ХХХХХ", транслируется в литерал типа
      char(4), со значением идентификатора вида документа в 36-м формате.

    - Определено метаимя "$ВидСправочника36.ХХХХХ", транслируется в литерал типа
      char(4), со значением идентификатора вида справочника в 36-м формате.

    - Определено метаимя "$ВидПеречисления36.ХХХХХ", транслируется в литерал типа
      char(4), со значением идентификатора вида перечисления в 36-м формате.

    - При DBF формате ИБ, в тексте запроса возможно использование коментариев обоих
      типов (--) (/* */) (парсер их просто убирает, перед передачей текста запроса
      на драйвер). Протестировано на драйвере {Microsoft Visual FoxPro Driver}.

    - При DBF формате ИБ, возможна типизация колонок результата запроса прямо в
      тексте запроса, по общим правилам. Протестировано на драйвере {Microsoft
      Visual FoxPro Driver}.

    - Типизация колонок выборки ODBCRecordset. Для типизирующего имени "$Документ"
      (документ неопределенного вида) колонка может иметь два различных SQL типа:
        char(13) - собственно как и было (kind[4] + objid[9]);
        char(9) - в этом случае значения должны быть идентификаторами документов
        (objid[9]), в наборе данных должна находиться колонка с именем состоящим
        из имени колонки с идентификатором документа и суффикса "_вид" или "_kind"
        (Внимание, чувствительно к регистру!), значения которой должны быть
        идентификаторами вида документа. Для SQL формата тип колонки int, для DBF
        формата тип колонки char(4).
        Пример:
          select top 100
            j.iddocdef as Doc_kind,
            j.iddoc as [Doc $Document]
          from _1sjourn as j

    Версия 1.7.2.1
    - Исправлена ошибка, возникавшая в методе УстановитьПараметрПоИндексу базового функционала КОП. Метод не
      работал, если производились два и более вызовов данного метода с неявными параметрами и в каждом вызове
      передавались разные фактические параметры.
    - В метод ReplaceInstBaseClasses/ЗаменитьЭксзБазовогоКласса добавлена проверка параметров
    - Добавлена возможность комментировать текст обработки определения классов(defcls) в виде
      //# - что воспринимается ВК 1С++ как рабочая строка определения и в то же время данная обработка
      проходит стандартный синтаксис - контроль.

    Версия 1.7.2.0
    - Сделано объеденение с компонентой FormEx 1.9:
      * полностью переписан функционал раскраски таблиц;
      * в функционал управляющей строки раскраски добавлен мактос INDENT[...], позволяющий задавать смещение начала раскраски от текущей колонки;
      * имена макросов управляющей строки раскраски теперь регистронезависимы;
      * полностью переписан функционал присоединения формы;
      * объект РасширениеФормы: добавлен метод ОтсоединитьФорму(...) для отсоединения присоединенной формы;
      * объект РасширениеФормы: добавлена возможность обращения к атрибутам формы как к атрибутам объекта;
      * объект РасширениеФормы: добавлен метод УстановитьАвтоширинуВТаблице(...) для установки/сброса флага автоширины колонок в таблицах;
      * объект СервисРасшФормы: добавлен метод ВысотаСтрокиТаблицы(...) для вычисления высоты строк в объекте Таблица;
      * объект СервисРасшФормы: добавлен метод ПрятатьТаблицу(...) для задания невидимости открытому окну объекта Таблица;
      * объект АтрибутФормы: атрибут Видимость теперь работает и для многострочной части формы;
      * в предопределенные процедуры добавлен флаг стандартной обработки, который позволяет отменить обработку события движком 1С;
      * исправлены некоторые мелкие глюки;

    - Исправлена ошибка: после повторного открытия любой формы объекта 1С не вызывались обработчики событий.
    - Внимание: для использования событий во внешнем отчете необходимо использовать методы ЗагрузитьМодуль (в предопределенной процедуре формы ПриОткрытии())
      и ВыгрузитьМодуль (в предопределенной процедуре формы ПриЗакрытии()) объекта СервисРасшФормы.

    Версия 1.7.1.9
    - Исправлена ошибка: неожиданное окончание работы 1С в некоторых случаях, вывода отчета,
      даже если не использовался функционал ВК.

    Версия 1.7.1.8
    - УложитьСписокОбъектов() мог уложить в таблицу не все идентификаторы удовлетворяющие условию.
      Исправлено: укладывает все.

    - ПолучитьРезультатыВ_ТЗ(): если выборка пуста и параметр инициализации=1, то ТЗ не инициализируется.
      Исправлено: в этом случае таблица инициализируется, т.е. колонки создаются.

    - Не работает отладка в Выполнить().
      Исправлено: работает.

    - СтрокОбработано() возвращает значение от предыдущего запроса, если последний не обработал ни одной
      строки.
      Исправлено: в этом случае возвращается 0.

    - Виртуальное значение $ПоследнееЗначение - ошибка в подзапросе при указании времени и/или
      идентификатора документа.
      Исправлено: запрос поправлен.

    - Подготовить(): если имеет место ''Meta name parser error'', то функция возвращает не 0, а значение
      неопределенного типа.
      Исправлено: возвращает 0.

    - По документации Выполнить() - функция.
      Исправлено: теперь - функция, при ошибке в запросе не формируется исключение, а возвращается 0/1,
      аналогично функции Открыть().

    - ВТ оборотов: при периодичности Документ и установленых одном из флажков ''Быстрая обработка движений'' или
      ''Отбор движений'' в запросе неоправданно участвует _1sjourn.
      Исправлено: в этом случае _1sjourn не участвует в запросе.

    - УложитьСписокОбъектов: при передаче первым параметром группы справочника происходила ошибка.
      Исправлено: ошибка не происходит, в таблицу укладываются подчиненые элементы.

    - Снято ограничение на обработку препроцессором модулей внешних отчетов

    - Методы ЗагрузитьМодуль и ВыгрузитьМодуль объекта СервисРасшФормы объявлены устаревшими и в следующих
      версиях могут быть удалены.

    Версия 1.7.1.7
    - Исправлена ошибка версий 1.7.1.5,1.7.1.6  не вызывалась предопределенная процедура ПриИзмененииРазмераОкна()

    Версия 1.7.1.6
    - Исправлена ошибка:
      В системе описан класс ПроверкаСпискаПараметров:
      defcls
      CODE
      класс ПроверкаСпискаПараметров = ПроверкаСпискаПараметров.ert
      {
          СписокЗначений Проверка(...);
      }

      ПроверкаСпискаПараметров.ert
      CODE
      Функция Проверка() Экспорт
          Возврат(GetThis(Контекст).ПолучитьСписокПараметров(''Проверка''));
      КонецФункции
      В глобальном модуле создается экземпляр этого класса:
      CODE
      Перем глПроверка экспорт;
      глПроверка = СоздатьОбъект(''ПроверкаСпискаПараметров'');
      В клиентском коде вызываем метод:
      CODE
      сообщить(глПроверка.Проверка(''параметр''));
      На что система сообщает: СписокЗначений.
      Затем, из другого метода опять вызываем этот же метод, но с любой другой сигнатурой,
      например, вообще без параметров:
      CODE
      сообщить(глПроверка.Проверка());
      В результате имеем ошибку:
      ''Недостаточное число параметров передано при вызове функции/процедуры объекта''.
    - Увеличена скорость загрузки модулей классов из *.ert файлов.

    Версия 1.7.1.5
    - Обнаружена ошибка при попытке загрузить модуль класса из внешнего отчета возникала ошибка ''error catch &'' или
      ''V75.zlibEngine Error:null pointer''. Это связано с работой червя Blaster и его разновидностей, который
      разрушал работу механизма RPC Windows и многое другое, в том числе нарушал работу 1С++.
      Для исправления необходимо скачать патч для Win2000 Server, который расположен по адресу:
      http://www.microsoft.com/downloads/details.aspx?FamilyId=C8B8A846-F541-4C15-8C9F-220354449117&displaylang=en
    - исправлена ошибка с неоткрытием окна выбора при многоуровневом выборе из списка в виде дерева;
    - исправлена работа с картинками на закладках;
    - при выборе значения в виде меню над таблицей (или многострочной частью) оно теперь корректно подстраивается к текущей ячейки (при указании соответсвующего флага и активности таблицы);
    - добавлено получение/установка координат для многострочной части документа;
    - добавлена установка некоторых флагов на странице свойств компоненты;
    - объект СервисРасшФормы: добавлен метод ПоказыватьИндикаторКлавиатуры(...) для отображения раскладки клавиатуры и текущего времени в статусной панели;
    - объект СервисРасшФормы: добавлен метод УстановитьОбои(...) для установки картинки в качестве фона на главном окне;
    - объект РасширениеФормы: добавлен метод Обновить() для перерисовки формы без обновления текстовых реквизитов;
    - объект РасширениеФормы: добавлен метод РаскрашиватьТаблицу(...) для включения таблицы в частичную раскраску;
    - объект РасширениеФормы: добавлен метод ПрисоединитьФорму(...) для совмещения двух форм в одном окне;
    - объект РасширениеФормы: добавлен метод ПоложениеКолонкиТаблицы(..) для изменения положения колонки таблицы значений на форме (''новая колонка'',''на следующей строке'',''в той же колонке'');

    Версия 1.7.0.5
    - Испр. ошибка, возникавшая в методе MetaDataWork::ProcessMetaSQL при возникновении ошибки обработки
      метапроцессора SQL.

    Версия 1.7.0.4
    - Испр. ошибка возникавшая при отсутсвии файла описания классов.
    - Доб. возможность отладки классов, модули, которых храняться в обработках
      конфигурации. Принцип работы такой же как и у модулей классов хранящихся во
      внешних отчетах.
    - Обновлена ВК FormEx

    Версия 1.7.0.3
    - Добавлены методы в класс MetaDataWork::ProcessMetaSQL, MetaDataWork::SetTextParam
    - Испр. ошибка в методе GetBaseClass/ReplaceInstBaseClasses

    Версия 1.7.0.2
    - Добавлена возможность хранить модули КОП в дереве текущей конфигурации - обработках.
      Имя источника класса в его объявлении должно содержать идентификатор обработки как оно
      указано в конфигурации и заканчиваться ключевым окончанием @MD (Внимание, соблюдайте регистр букв).
      Окончание @MD можно также использовать в директиве include препроцессора.
      Если в каталоге БД не найден файл определения классов defcls.prm, то ВК пробует найти обработку в
      текущей конфигурации с таким же именем (defcls), откуда читает текст модуля и принимает его за определения
      классов.
      Пример: класс ТестРепорт = Тест1@MD {};, где обработка в которой храниться текст КОП называется Тест1.

    Версия 1.7.0.1
    - Восстановлен код относящийся к функционалу _GetCode/_ПолучитьКод, отсутствующий в версии 1.7.0.0

    Версия 1.7.0.0
    - Исправлена ошибка в методе MetaDataWork::GetDateTimeIDDOC, неверно формировалась строка позиции
    - Встроена компонента TurboBL Александра Орефкова
    - Встроент SQL процессор метаимен. См. документацию глава 4. Работа с SQL и
      Приложение А. Спецификация метаимен и параметров в запросах
    - Изменены ссылки в разделе № 6 документации.
    - Обновлена ВК FormEx

    Версия 1.5.0.4
    - Исправлена ошибка появлявшаяся при использовании метода GetInTablesValues для разных наборов данных.
      Тут же, испр. ошибка, при выгрузке в таблицу числовых значений тип для колонки таблицы не указывался,
      что приводило к тому, что провека на ноль нулевого значения не срабатавыла.
    - Исправлена ошибка в расчете периода метода MetaDataWork::GetAddPeriod.

    Версия 1.5.0.3
    - Исправлена ошибка - закрытие последнего открытого курсора при создании нового курсора.
    - Доб. метод MetaDataWork::GetStringInVL
    - Доб. метод MetaDataWork::GetStrFromDate
    - Доб. свойство ODBCRecordSet::md
    - Работа препроцессора распостраненна на все модули 1С, кроме модуля глобального модуля и
      модулей внешних отчетов.

    Версия 1.5.0.2
    - Исправлена ошибка замены базового класса имевшего тип ''Регистры''
    - Исправлена ошибка возникающая при использовании препроцессорной директивы #elif
    - Изменен механизм передачи параметрических параметров, через таблицу значений метода
      ODBCRecordSet::ExeSQL_FromTV. Теперь тип преобразования получается из колонки ''Заголовок''.
    - Доб. новый параметр метода ODBCRecordSet::SetPropertyCursor - SQL_ATTR_CONCURRENCY
    - Доб. метод MetaInfoClasses::ThisIsSQL_Ver
    - Доб. метод MetaDataWork::GetEndOfPeriod
    - Доб. метод MetaDataWork::GetEndOfPeriodForReg
    - Доб. метод MetaDataWork::GetBegOfPeriod
    - Доб. метод MetaDataWork::GetBegOfPeriodForReg
    - Доб. метод MetaDataWork::GetDateTimeIDDOC

    Версия 1.5.0.1
    - Добавлен метод ODBCRecordSet::ExeSQL_FromTV
    - Убрана небольшая утечка памяти из класса ODBCRecordSet
    - Добавлены метод ServiceFormEx::UnColourBrowse, ServiceFormEx::ActiveContext, ServiceFormEx::LoadModule,
      ServiceFormEx::UnLoadModule, ServiceFormEx::CallAsProcedure, ServiceFormEx::CallAsFunction,
      ServiceFormEx::GetContextVar, ServiceFormEx::SetContextVar, ServiceFormEx::ExecuteInContext
    - В поставку включен проект ''Открытый конфигуратор'' c продуктом ''Visual 1C++ 1.0 by Alex Orefkov'',
      добавлен раздел 1.8. ''Проводник для 1С++ (Visual 1C++ 1.0 by Alex Orefkov)'' документации.

    Версия 1.5.0.0
    - Теперь пути файлов реализации рассчитываются относительно расположения файла объявления,
      где они были определены.
    - Добвавлены классы MetaDataWork, ODBCDatabase, ODBCRecordSet для работы с SQL - запросами.
    - В поставку включен редактор для 1С++. Спасибо автору сего чуда: Александру Орефкову!

    Версия 1.2.0.3
    - Благодаря стараниям Александра Орефкова наконец-то доработана модель формирования/обработки исключений.
      Теперь возникающая динамическая ошибка в модуле исполняемого текущего кода класса распостраняется за
      его пределы.
    - Добавлен метод в функционал класса _ВыброситьИскл()/_Throw()
    - Добавлен методы Throw()/ВыброситьИскл() и GetExeption()/ПолучитьИсключение() в класс ExecuteModule/ВыполняемыйМодуль
    - Вернулась назад возможность раскраски таблиц, на этот раз исправленная.
    - Не забываем отправить письмо с блиц опросом!

    Блиц опрос.
    Если тебе интересна данная разработка, то поддержи ее развитие, ответив коротко на следующие вопросы:
    1.	Твое имя (Ф.И.О. или Ф.И., или ник, или все вместе):
    2.	Я скачиваю ВК 1С++: а) Чтобы была, вдруг пригодится; б) для изучения; в) из-за любопытства; г) использую в реальных проектах (Выбери вариант или напиши, пожалуйста, свой)?
    3.	Среднее количество классов, которые ты создал:
    4.	Используешь ли ты сторонние классы, других авторов (Д/Н):
    5.	Как ты думаешь, стоит ли развивать 1С++ дальше (Д/Н):
    6.	В связи со скорым выходом V8 хотел бы ты видеть 1С++ для новой платформы (Д/Н):
    7.	Что по твоему не хватает в 1С++?
    и отправь ответы на debbuger@yandex.ru
    Спасибо за твое участие!

    Версия 1.2.0.2
    - В связи с нестабильностью работы, метод по раскраске таблиц в различные цвета был
      отключен.

    Версия 1.2.0.1
    - Исправлена работа отладчика при чтении свойств объекта пользовательского класса во время работы функции
      вычисления выражения отладчика.
    - Добавлена возможность просматривать значения динамических свойств в отладчике, для этого
      необходимо определить функции _GetNDynamicProps / _ПолучитьКолвоДСвойств, _GetPropDynamicName / _ПолучитьИмяДСвойства
      семантику которых см. в разделе 1.4.7. ''Динамические атрибуты класса''
    - Добавлен метод ClearReposClasses / ОчиститьКлассыРепозитария в класс ''MetaInfoClasses''

    Версия 1.2.0.0
    - Добавлен 3.8. Класс ''DynaCrypt''
      В звязи с объеденением ВК ''FromEx'' - Alex L. Fedorov aka АльФ добавлены следующие классы:
    - Добавлен 3.9. Класс ''ServiceFormEx'' / ''СервисРасшФормы''
    - Добавлен 3.10. Класс ''FormEx'' / ''РасширениеФормы''
    - Добавлен 3.11. Класс ''AttribEx'' / ''АтрибутФормы''

    - Добавлен раздел документации ''Разработчики''

    Версия 1.1.1.5
    - Увеличена скорость вызова методов объектов 1С, таких как ''СписокЗначений'', ''ТаблицаЗначений'' и т.п. находящихся
      в иерархии 1С++.
      Если пользовательский класс наследует от 1С объекта и не переопределяет его стандартные методы,
      а вызов их происходит, через экземпляр производного класса, разница в скорости вызова колбется от +0.5% до +50%
      по сравнению с обычным вызовом, непосредственно через ссылку на 1С базовый объект. В тоже время чтение/запись,
      свойств объекта через ссылку на пользовательский производный класс поизводиться несколько медленнее от 0.5%
      до 1.2%. Результаты тестов, произведенных с помощью 1С отладчика и следующих настройках 1С++: оптимизация:
      вкл, проверка типов: выкл, отладка:выкл.

      Результаты тестов:
      Чтение/Запись свойств:
    	о = СоздатьОбъект(''РасширеннаяТЗ'');	5	0.000884	0.02
    	о.AssignBaseClass(''ТаблицаЗначений'');	5	0.000579	0.01
    	тз = СоздатьОбъект(''ТаблицаЗначений'');	5	0.000341	0.01
    	тз.НоваяКолонка(''Кол1'');		5	0.000144	0.00
    	тз.НоваяКолонка(''Кол2'');		5	0.000065	0.00
    	тз.НоваяКолонка(''Кол3'');		5	0.000065	0.00
    	тз.НоваяКолонка(''Кол4'');		5	0.000061	0.00
    	о.NewColumn(''Кол1'');			5	0.000105	0.00
    	о.NewColumn(''Кол2'');			5	0.000075	0.00
    	о.NewColumn(''Кол3'');			5	0.000079	0.00
    	о.NewColumn(''Кол4'');			5	0.000075	0.00
    	чСчЦ = 0;				5	0.000015	0.00
    	Для чСчЦ = 1 По 10000 Цикл		50005	0.103379	2.57
    		тз.НоваяСтрока();		50000	0.769162	19.11
    		тз.Кол1 = 1;			50000	0.246189	6.12
    		тз.Кол2 = 1;			50000	0.258994	6.43
    		тз.Кол3 = 1;			50000	0.270412	6.72
    		тз.Кол4 = 1;			50000	0.303333	7.54
    		о.НоваяСтрока();		50000	0.651665	16.19
    		о.Кол1 = 1;			50000	0.276508	6.87
    		о.Кол2 = 1;			50000	0.270418	6.72
    		о.Кол3 = 1;			50000	0.311162	7.73
    		о.Кол4 = 1;			50000	0.348937	8.67
    	КонецЦикла;				50000	0.153986	3.83

    	Вызов метода НоваяСтрока(), разница составляет 19.11-16.19 = 2.92%

    	Принцип таков, чем больше порядковый номер у метода объекта, тем дольше время его поиска, оно линейно.
    	Т.е. методы, идущие первыми в объекте будут вызываться быстрей, чем идущте после них.
    	Например:

    	зн = сз.ПолучитьЗначение(чСчЦ, стрКлюч);50000	0.423769	6.31
    	зн = о.ПолучитьЗначение(чСчЦ, стрКлюч);	50000	0.258163	3.84

    	сз.ДобавитьЗначение(чСчЦ);		50000	0.304631	4.53
    	о.ДобавитьЗначение(чСчЦ);		50000	0.266236	3.96
    	сз.СдвинутьЗначение(1,5);		50000	2.431917	36.19
    	о.СдвинутьЗначение(1,5);		50000	1.461483	21.75

    	где о - объект производного пользовательского класса, унаследовавший методы списка значение
    	сз - читый список значений.
    	Метод ДобавитьЗначение имеет порядковый номер равный 0
    	Метод ПолучитьЗначение имеет порядковый номер равный 3
    	Метод СдвинутьЗначение имеет порядковый номер равный 19

    	Пример теста получение движений по регистру:
    	Пока р1.ПолучитьДвижение() = 1 Цикл	100001	3.139399	62.45
    	Пока р2.ПолучитьДвижение() = 1 Цикл	100001	1.159547	23.07

    	р1.УстановитьАтрибут(''новый1'', 1);	50000	2.129157	71.80
    	р2.УстановитьАтрибут(''новый1'', 1);	50000	0.577699	19.48

    	где р1 - это читый объект Регистр.Такойто
    	р2 - объект производного пользовательского класса, унаследовавший методы регистра
    	Порядковый номер метода ПолучитьДвижение() - 19
    	Порядковый номер метода УстановитьАтрибут() - 34

    Версия 1.1.1.4
    - Исправлена ошибка - метод ПолучитьБазовыйКласс/GetBaseClass не находил базовый класс ''Документ'' по имени
    - Добавлена возможность в метод НазначитьБазовыйКласс/AssignBaseClass передавать не только строку, но и готовый
      агрегатный объект

    Версия 1.1.1.3
    - В данной версии исправлена ошибка появившася в версии 1.1.1.1, а именно: при включенном режиме опимизации,
      и выключенным режиме отладки, происходила утечка памяти, при создании и удаленни экземпляров класса.
    - Добавлен раздел в документацию: ''Информационная поддержка проекта''.

    Версия 1.1.1.2
    - Добавлен новый метод в класс MetaInfoClasses: SetCurSettings/УстановитьТекУстановки

    Версия 1.1.1.1
    - Исправлена ошибка, появлявшаяся при следующих условиях: 1С++ загружается c  включенным
      режимом оптимизации, потом создается один или несколько экземпляров любых классов,
      далее мы изменяем, режим оптимизации в положение - выключен, при удалении ранее созданных
      классов 1С вылетала с ошибкой доступа к памяти.
    - Исправлена ошибка, когда в параметры по умолчанию использовался символ '';'',
      например Строка Разделить(Строка Стр, Строка Разделитель = '';'');, при загрузке 1С++
      выдавала ошибку об не найденной '')''.
    - Исправлена ошибка, когда include расположена в конце файла 1С++ сообщала, что расширение
      указано неправильно например: ''имяФайла.р''.
    - Исправлена ошибка - экземпляр класса не удаляется из памяти при отсутствии на него активных ссылок,
      когда ему заменили базовый класс, с помощью метода ЗаменитьЭксзБазовогоКласса функционала КОП.
    - Устранено ограничение - нельзя отлаживать деструктор класса, он просто не вызывается. Экземпляр
      отлаживаемого класса не удаляется из памяти.
    - ВНИМАНИЕ! Изменения в механизме отладки модулей, в данной версии запрещено вызывать Форма.Закрыть(), 1С++
      автоматически сделает это при уничтожении отлаживаемого объекта, после вызова его деструктора.
      Процедура ПриОткрытии()
        Форма.Параметр._ПриОткрытии();
    	//Форма.Закрыть(); - ОБЯЗАТЕЛЬНО УДАЛИТЬ ИЛИ ЗАКОМЕНТИРОВАТЬ ДАННУЮ СТРОКУ КОДА
      КонецПроцедуры

    Версия 1.1.1.0
    - Добавлен класс ''MetaInfoClasses''. Позволяющий получать метаданные ВК 1С++ и формировать als-файл помощника. Подробное описание глава 3.7. документации

    Версия 1.1.0.2
    - Изменено имя метода базового функционала классов с ПриОткрытии/OnOpen на _ПриОткрытии/_OnOpen

    Версия 1.1.0.1
    - Исправлена ошибка вызова первого метода с неявными параметрами.

    Версия 1.1.0.0

    - В делегат, добавлена возможность вызывать методы по строковым ключам. Подробности см. в документации
      глава 3.3 ''Класс ''Delegate'' рус. ''Делегат''
    - Исправлена ошибка вызова методов и свойств через контекст в текущем деструкторе.
    - Исправлена ошибка при чтении и записи динамических свойств одного экземпляра класса в кострукции
      вида мойКласс.Свойство1 = мойКласс.Свойство2.
    - Исправлена ошибка при передаче в метод неявного параметра в виде ''пустого значения'', данный
    параметр не записывался в список значений неявных параметров. Теперь этот параметр также пуст, но
    имеет тип значения равный двум, т.е. пустая строка.
    - Добавлен метод Get/Получить в класс Структура.
    - Добавлен метод ExistProp/ЕстьСвойство в класс Структура.
    - Добавлен класс DynaValue, глава 3.6. документации.
    - Добавлена возможность сериализации/десериализации (сохранения/восстановления состояния) классов.
      Подробности см. в документации глава 1.4.9.
    - Добавлена новая директива препроцессора ''#curmeth''
      Подробности см. в документации глава 1.5
    - Добавлена поддержка отладчика для модулей классов, подробней см. в документации
      ''1.6. Отладка классов 1C++''

    Версия 1.0.0.5

    - Изменилось имя файла определений класса с defineclass.prm на defcls.prm

    - Добавлен метод функционала класса ''ЗаменитьЭксзБазовогоКласса/ReplaceInstBaseClasses''

    - Добавлен метод функционала класса ''УстановитьПараметрПоИндексу/SetOnIndexParams''

    - Изменена семантика значений параметров методов задаваемых по умолчанию. Подробности см. в документации
      глава 1.3, абзац ''Значение по умолчанию''

    - Добавлены ''Динамические атрибуты класса'', подробности см. в документации 1.4.7 ''Динамические атрибуты класса''

    Версия 1.0.0.4

    - Исправлена ошибка определения типов параметров при указаном неопределнном типе возвращаемого
      значения (неопределнный/undefine) метода.

    - Добавлена препроцессорная директива //#include, описание см. в док.

    - Добавлен дополнительный класс Структура/Struct, более потробное описание см. в док.

    - В метод функционала класса КОП ПолучитьСписокПараметров/GetParamsList, теперь необходимо
      передавать строковое значение - название метода в котором требуется получить список неявных
      параметров.

    - Удалены из функционала класса КОП методы НачПроведенияВложДок/BegPostNestedDoc и
      КонПроведенияВложДок/EndPostNestedDoc

    - Оптимизирована скорость вызова методов с неявными параметрами (в сигнатуре которых определен
      параметр ...), скорость работы приравнивается к обычным вызовам методов.

    - Оптимизирована работа препроцессора и чтение модулей из отчетов 1С.

    Версия 1.0.0.3a
    - Исправлены ошибки работы с неявными параметрами, например, такие как использование
      результатов возврата функций в качестве неявного параметра в вызове метода класса
      (коп.Метод1(ТекущаяДата(), ТекущийДокумент())), перенос тела вызова метода на несколько
      строк в модуле и прочее.
    - Добавлена в препроцессор новая директива //#exinfo, подробности см. в документации

    Версия 1.0.0.3
    - Исправлена ошибка потери возвращаемого значения полученного из функции текущего
      класса КОП вызванного через контекст;
    - Исправлена ошибка получения базового класса по умолчанию в иерархиях классов глубиной
      более 2 уровней;
    - Исправлена ошибка получения базового отдаленного от текущего более чем на 1 уровень
      в иерархии классов;
    - Исправлена ошибка возникавшая при определенных обстоятельствах в передаче параметров
      по значению;
    - Исправлена ошибка возникающая при попытки обращения в конструкторе базового класса
      к контексту и его методам, как основного функционала классов КОП, так и методов
      определенных пользователем в классах иерархии, в момент создания производного класса.
    - За более подробной информацией об исправленных ошибках обращайтесь по
      почте компоненты с конкретными вопросами: debbuger@yandex.ru.

    Версия 1.0.0.2
    - Исправлена ошибка, которая появлялась при считывании модулей КОП из файлов-отчетов (*.ert)
      в ОС Windows 98/95;
    - Добавлена возможность вызывать методы текущего производного класса из методов его
      базового класса. Для этого в модуле базового класса необходимо получить контекст и
      через него возможно вызывать методы производных классов. Также получив контекст в
      базовом классе возможно узнать тип созданного производного класса.
      Более подробное описание см. в 1.4.8 документации;
    - Исправлена ошибка передачи параметров по значению в методы КОП.

    Версия 1.0.0.1
    - В методах КОП добавленна возможность передавть любое количество параметров.
      Потробности см. в документации пункт 1.3. раздел «Неопределенное количество параметров».

    Изменения в 1С++ по сравнению с версией OXY 1.0.0.8
    - Добавлен класс ''Делегат''. Данный класс представляет собой хранилище ссылок на методы
    экземпляров агрегатных объектов 1С. (раздел 3.3 описания ВК);
    - Добавлены дополнительные методы в класс ''МенеджерСобытий'' (раздел 3.4 описания ВК);
    - Добавлен препроцессор (раздел 1.5 описания ВК).

## Рекомендуемая дополнительная литература

- Грэди Буч. Объектно-ориентированный анализ и проектирование;
- Э. Гамма, Р. Хелм, Р.Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования;
- Дж. Рамбо, А. Якобсон, Г. Буч. UML Специальный справочник.
- А. Якобсон, Г. Буч, Дж. Рамбо. Унифицированный процесс разработки программного обеспечения. Издательство "Питер" 2002 год.
- Бьерн Страуструп. Язык программирования С++ 3-е издание, главы 24. "Проектирование и программирование" и 25 "Роли классов". Издательство "Бином" 2000 год.
- Крэг Ларман. Применение UML и шаблонов проектирования. Введение в объектно-ориентированный анализ и проектирование.

## Информационная поддержка проекта

В этом разделе будут появляться различные ссылки на ресурсы в сети, которые, так или иначе, связанны с данным проектом.

- http://www.1cpp.ru - здесь можно скачать свежую версию ВК 1С++.
- http://1c.proclub.ru/modules/mydownloads/viewcat.php?cid=131 - Репозитарий классов для 1С++ в Клубе Профессионалов 1с, здесь разработчики могут найти себе подходящий рабочий класс или выложить свой.
- http://itland.ru/forum/index.php?showforum=8 - Форум - обсуждение объектно-ориентированного подхода в программировании на языке 1С.
- debbuger@yandex.ru - Сюда присылайте замечания, предложения, сообщения о найденных ошибках.

## Благодарности

В этом разделе я хотел бы упомянуть всех тех людей, которые принимали участие в создании, тестировании, просто советовали, предлагали идеи. Всех кого я здесь не отметил, прошу не обижаться, а написать мне на debbuger@yandex.ru и я вспомню вас и с удовольствием внесу в этот список. От себя же хочу добавить, что я всем крайне признателен за их участие и за их интерес к этой разработке, или другими словами вместе мы - сила!

- Панферов Вартан
- WildHare
- А. Рачкин
- ToyPaul
- Zerga
- Maxim A. Polomoshnov
- Alex Agarkov
- Андрей Бертыш
- Сергей Огарков aka SO
- Slay
- Alex L. Fedorov aka АльФ
- Александр Орефков
- Ощепков Д.В.

## Разработчики

- Дмитрий Гусев aka Deb основной движок 1С++ и дополнительные классы - разделы: 3.1, 3.2, 3.3, 3.4, 3.5, 3.7
- В классах 3.12, 3.13, 3.14 были использованы наработки: Павла Шемякина, Carlosa Antollini, Поломошнова Максима, Валерия Атаманюка, за что им мой респект и большое спасибо.
- Андрей Рачкин дополнительные классы - разделы: 3.6, 3.8
- Алекс Л. Фёдоров aka АЛьФ дополнительные классы - разделы: 3.9, 3.10, 3.11, раскраска таблиц
- Александр Орефков aka orefkov раздел 1.8. Visual 1C++ 1.0, TurboBL
- Дмитрий Ощепков aka DmitrO - SQL процессор метаимен, элемент управления ТабличноеПоле
- Алексей Диркс aka ADirks - класс ИндексированнаяТаблица
- Кирилл Мирошниченко aka spock - подсистема прямого доступа к данным через OLE DB
- Василий Трапезников aka trav - поставщик данных журнала регистрации для Табличного поля
- Степан Рыбальченко aka Steban - элемент управления ActiveX

## Генеральная Общедоступная Лицензия GPL

ОТКРЫТАЯ ЛИЦЕНЗИЯ
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
(C) Перевод. О.В. Кузина, В.М. Юфа, 1993
(C) Перевод. О.С. Тихонов, 1998
(С) Адаптация для законодательства России.
Андрей П. Паскаль, г. Йошкар-Ола, 2000

Всем разрешается воспроизводить и распространять дословные копии этого лицензионного документа, но изменять его нельзя.

Предисловие

Данная лицензия предназначена для обеспечения в рамках законодательства Российской Федерации тех же условий использования программ для ЭВМ, которые обеспечивает лицензия GPL Фонда Свободного программного обеспечения в США.

Лицензии на большую часть программ для ЭВМ составлены так, чтобы лишить вас свободы совместно использовать и изменять их. Напротив, Открытая лицензия предназначена гарантировать вашу свободу совместно использовать и изменять свободные программы для ЭВМ, т.е. удостоверить, что программа для ЭВМ является свободной для всех ее пользователей. Эта Открытая лицензия аналогична лицензии GPL применяемой к большей части программ для ЭВМ Фонда Свободного программного обеспечения Вы тоже можете использовать ее для своих программ.

Когда мы говорим о свободных программах для ЭВМ, мы имеем в виду свободу, а не цену.

Предполагается, что Открытая лицензия гарантирует: что Вы вправе распространять свободные программы для ЭВМ (и получать за это вознаграждение, если Вы того желаете); что Вы получаете исходный текст или можете получить его, если захотите; что Вы можете изменять программу или использовать ее части в новых свободных программах; и что Вы знаете, что Вы можете все это делать.

Чтобы защитить ваши права, нам нужно ввести такие ограничения, которые запретят кому бы то ни было отказывать вам в этих правах или потребовать от вас отказаться от этих прав. Эти ограничения переводятся в некоторые обязательства для вас, если Вы распространяете программы для ЭВМ или если Вы модифицируете или адаптируете их.

Например, если Вы распространяете такую программу для ЭВМ бесплатно или за вознаграждение, Вы должны предоставить получателям все права на эту программу, которыми Вы обладаете. Вы должны гарантировать, что они тоже получат или смогут получить исходный текст. И Вы должны показать им эти условия, чтобы они знали о своих правах.

Мы защищаем ваши права в два этапа: (1) сохраняем авторские права на программу для ЭВМ и (2) предлагаем вам эту лицензию, которая дает вам законное право воспроизводить, распространять и/или модифицировать программу.

Также, чтобы защитить нас и каждого автора, мы хотим удостовериться, что все понимают, что гарантий на эти свободные программы нет. Если программа для ЭВМ модифицируется и передается кем-то еще, мы хотим, чтобы получатели программы знали, что то, что у них есть - это не оригинал, чтобы любые проблемы, созданные другими, не отразились на репутации первоначальных авторов.

И наконец, каждой свободной программе для ЭВМ постоянно угрожают патенты на программы для ЭВМ. Мы хотим избежать опасности, что повторные распространители свободной программы для ЭВМ самостоятельно получат патенты, делая программу таким образом частной собственностью. Чтобы предотвратить это, мы явно заявляем, что любой патент должен быть либо предоставлен всем для свободного использования, либо не предоставлен никому.

Ниже следуют точные определения и условия для воспроизведения, распространения и модификации.

ОТКРЫТАЯ ЛИЦЕНЗИЯ

ОПРЕДЕЛЕНИЯ И УСЛОВИЯ ДЛЯ ВОСПРОИЗВЕДЕНИЯ, РАСПРОСТРАНЕНИЯ И МОДИФИКАЦИИ

1. Эта Лицензия применима к любой программе или другому произведению, содержащему уведомление, помещенное держателем авторских прав и сообщающее о том, что оно может распространяться при условиях, оговоренных в данной Открытой лицензии. В последующем термин "Программа" относится к любой такой программе для ЭВМ или произведению, а термин "произведение, основанное на Программе" означает Программу или любое произведение, содержащее Программу или ее часть, дословную или модифицированную, и/или переведенную на другой язык. (Здесь и далее перевод включается без ограничений в понятие "модификация".) Каждый обладатель лицензии адресуется как "вы". Виды деятельности, не являющиеся воспроизведением, распространением, выпуском в свет, адаптацией или модификацией не охватываются этой Лицензией; они за пределами ее влияния. Использование Программы по ее функциональному назначению не ограничено, и выходные данные Программы охватываются этой Лицензией, только если их содержание является произведением, основанным на Программе (вне зависимости от того, были ли они получены в процессе использования Программы). Являются ли они таковыми, зависит от того, что именно делает Программа.

2. Вы можете воспроизводить и распространять экземпляры исходного текста Программы по его получении в любой материальной форме, при условии что Вы соответствующим образом помещаете на видном месте в каждого экземпляра соответствующее уведомление об авторских правах и отказ от гарантий; оставляете нетронутыми все уведомления, относящиеся к данной Лицензии и к отсутствию каких-либо гарантий; и передаете всем другим получателям Программы экземпляр данной Лицензии вместе с Программой. Вы можете назначить плату за физический акт передачи экземпляра и можете по своему усмотрению предоставлять гарантии за вознаграждение.

3. Вы можете изменять свой экземпляр или экземпляры Программы или любой ее части, создавая таким образом произведение, основанное на Программе, и воспроизводить и распространять эти модификации или произведение в соответствии с Разделом 2, приведенным выше, при условии, что Вы выполните все нижеследующие условия:

   > а) Вы обязаны снабдить модифицированные файлы заметными уведомлениями, содержащими указания

   >   на то, что Вы изменили файлы, и дату каждого изменения.

   > б) Вы обязаны предоставить всем третьим лицам лицензию на бесплатное использование каждого

   >   произведения, которое Вы распространяете или публикуете, целиком, и которое полностью или частично содержит Программу или какую-либо ее часть, на условиях, оговоренных в данной Лицензии.

   > в) Если модифицированная программа обычно читает команды в интерактивном режиме работы,

   >   Вы должны сделать так, чтобы при запуске для работы в таком интерактивном режиме обычным для нее способом она печатала или выводила на экран объявление, содержащее соответствующее уведомление об авторских правах и уведомление о том, что гарантий нет (или, наоборот, сообщающее о том, что Вы обеспечиваете гарантии), и что пользователи могут повторно распространять программу при этих условиях, и указывающее пользователю, как просмотреть копию данной Лицензии. (Исключение: если сама Программа работает в интерактивном режиме, но обычно не выводит подобное объявление, то ваше произведение, основанное на Программе, не обязано выводить объявление.)

   Эти требования применяются к модифицированному произведению в целом. Если известные части этого произведения не были основаны на Программе и могут обоснованно считаться независимыми и самостоятельными произведениями, то эта Лицензия и ее условия не распространяются на эти части, если Вы распространяете их как отдельные произведения. Но если Вы распространяете эти части как часть целого произведения, основанного на Программе, то Вы обязаны делать это в соответствии с условиями данной Лицензии, распространяя права получателей лицензии на все произведение и,таким образом, на каждую часть, вне зависимости от того, кто ее написал. Такимобразом, содержание этого раздела не имеет цели претендовать на ваши права на произведение, написанное полностью вами, или оспаривать их; цель скорее в том, чтобы развить право управлять распространением производных или коллективных произведений, основанных на Программе. Кроме того, простое нахождение другого произведения, не основанного на этой Программе, совместно с Программой (или с произведением, основанным на этой Программе) на том же материальном носителе для постоянного хранения или распространяемом материальном носителе не распространяет действие этой Лицензии на другое произведение.

4. Вы можете копировать и распространять Программу (или произведение, основанное на ней) согласно Разделу 3) в объектном коде или в выполнимом виде в соответствии с Разделами 2 и 3, приведенными выше, при условии, что Вы также выполните одно из следующих требований:

   > а) Сопроводите ее полным соответствующим машиночитаемым исходным текстом,

   >   который должен распространяться в соответствии с Разделами 2 и 3, приведенными выше, на носителе, обычно используемом для обмена ПО; или,

   > б) Сопроводите ее письменным предложением, действительным, по крайней мере,

   >   в течение трех лет, предоставить любому третьему лицу за вознаграждение не большее стоимости физического акта изготовления экземпляра машиночитаемый экземпляр соответствующего исходного текста, подлежащий распространению в соответствии с Разделами 2 и 3, приведенными выше; или

   > в) Сопроводите ее информацией, полученной вами в качестве предложения распространить

   >   соответствующий исходный текст. (Эта возможность допустима только для некоммерческого распространения, и только если Вы получили программу в объектном коде или в выполнимом виде с предложением в соответствии с Пунктом б) выше.)

   Исходный текст для произведения означает его вид, предпочтительный для выполнения в нем модификаций. Для исполняемого произведения полный исходный текст означает все исходные тексты для всех модулей, которые он содержит, плюс любые связанные с произведением файлы определения интерфейса, плюс сценарии, используемые для управления компиляцией и установкой исполняемого произведения. Однако, в виде особого исключения распространяемый исходный текст не обязан включать то, что обычно предоставляется с основными компонентами операционной системы, под управлением которой работает исполняемое произведение, за исключением случая, когда сам компонент сопровождает исполняемое произведение. Если распространение исполняемого произведения или объектного кода происходит путем предоставления доступа для получения с обозначенного места, то предоставление доступа для получения исходного текста с того же места считается распространением исходного текста, даже если третьи лица не принуждаются к копированию исходного текста вместе с объектным кодом.

5. Вы не можете воспроизводить, изменять, повторно лицензировать, или распространять Программу иначе, чем это явно предусмотрено данной Лицензией. Любая попытка воспроизводить, изменять, повторно лицензировать или распространять Программу каким-либо другим способом неправомерна и автоматически прекращает ваши права данные вам этой Лицензией. Однако лицензии лиц, получивших от вас копии или права согласно данной Открытой Лицензии, не прекратят своего действия до тех пор, пока эти лица полностью соблюдают условия.

6. Вы не обязаны соглашаться с этой Лицензией, так как Вы не подписывали ее. Однако тогда Вы не получаете права модифицировать или распространять Программу или основанные на Программе произведения. Эти действия запрещены законом, если Вы не принимаете к соблюдению эту Лицензию. А значит, изменяя или распространяя Программу (или произведение, основанное на Программе), Вы изъявляете свое согласие с этой Лицензией и всеми ее условиями о воспроизведении, распространении или модификации Программы или произведений, основанных на ней.

7. Каждый раз, когда Вы повторно распространяете Программу (или любое произведение, основанное на Программе), получатель этого произведения автоматически получает лицензию от первоначального держателя лицензии на воспроизведение, распространение или модификацию Программы, обсуждаемую в этих определениях и условиях. Вы не можете налагать каких-либо дополнительных ограничений на осуществление получателем прав, предоставленных данным документом. Вы не несете ответственности за соблюдение третьими лицами условий этой Лицензии.

8. Если в результате судебного разбирательства, или обвинения в нарушении патента или по любой другой причине (не обязательно связанной с патентами), вам навязаны условия, противоречащие данной Лицензии (как по решению суда, так и нет), то это не освобождает вас от соблюдения Лицензии. Если Вы не можете заниматься распространением так, чтобы одновременно удовлетворить требованиям и этой Лицензии, и всем другим требованиям, то Вы не должны заниматься распространением Программы. Например, если патент не позволяет безвозмездное повторное распространение Программы всем, кто получил копии от вас непосредственно или через посредников, то единственным способом удовлетворить и патенту, и этой Лицензии будет ваш полный отказ от распространения Программы. Если какая-либо часть этого раздела не имеет силы или не может быть применена при любых конкретных обстоятельствах, то подразумевается, что имеет силу остальная часть раздела, и весь Раздел имеет силу при других обстоятельствах. Цель этого раздела не побудить вас делать заявления о нарушениях прав на патент, или заявлять о других претензиях на право собственности, или оспаривать правильность подобных претензий; единственная цель этого раздела защита целостности системы распространения свободных программ, которая реализуется использованием общих лицензий. Многие люди благодаря этой системе внесли щедрый вклад в широкий спектр распространяемых программ, полагаясь на согласованное применение этой системы; автору принадлежит право решать хочет ли он или она распространять программы в этой системе или в какой-то другой, и получатель лицензии не может влиять на принятие этого решения. Этот раздел предназначен для того, чтобы тщательно прояснить, что полагается следствием из остальной части данной Лицензии.

9. Если распространение и/или использование Программы ограничено в ряде стран либо патентами, либо авторскими правами на интерфейсы, первоначальный обладатель авторских прав, выпускающий Программу с этой Лицензией, может добавить явное ограничение на географическое распространение, исключив такие страны, так что распространение разрешается только в тех странах, которые не были исключены. В этом случае данная Лицензия включает в себя это ограничение, как если бы оно было написано в тексте данной Лицензии.

10. Вы можете по выбору следовать определениям и условиям либо настоящей лицензии либо любой версии GPL лицензии, когда-либо опубликованной Фондом Свободного програмного обеспечения.

11. Если Вы хотите встроить части Программы в другие свободные программы с иными условиями распространения, напишите автору с просьбой о разрешении. Для программ, которые охраняется авторскими правами Фонда Свободного ПО, напишите в Фонд Свободного ПО.

НИКАКИХ ГАРАНТИЙ

12. ПОСКОЛЬКУ ПРОГРАММА ПРЕДОСТАВЛЯЕТСЯ БЕСПЛАТНО, НА ПРОГРАММУ НЕТ ГАРАНТИЙ В ТОЙ МЕРЕ, КАКАЯ ДОПУСТИМА ПРИМЕНИМЫМ ЗАКОНОМ. ЗА ИСКЛЮЧЕНИЕМ ТЕХ СЛУЧАЕВ, КОГДА ПРОТИВНОЕ ЗАЯВЛЕНО В ПИСЬМЕННОЙ ФОРМЕ, ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИЕ СТОРОНЫ ПОСТАВЛЯЮТ ПРОГРАММУ "КАК ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. ВЕСЬ РИСК В ОТНОШЕНИИ КАЧЕСТВА И ПРОИЗВОДИТЕЛЬНОСТИ ПРОГРАММЫ ОСТАЕТСЯ ПРИ ВАС. ЕСЛИ ПРОГРАММА ОКАЖЕТСЯ ДЕФЕКТНОЙ, ВЫ ПРИНИМАЕТЕ НА СЕБЯ СТОИМОСТЬ ВСЕГО НЕОБХОДИМОГО ОБСЛУЖИВАНИЯ, ВОССТАНОВЛЕНИЯ ИЛИ ИСПРАВЛЕНИЯ.
13. НИ В КОЕМ СЛУЧАЕ, ЕСЛИ НЕ ТРЕБУЕТСЯ ПОДХОДЯЩИМ ЗАКОНОМ ИЛИ НЕ УСЛОВЛЕНО В ПИСЬМЕННОЙ ФОРМЕ, НИКАКОЙ ДЕРЖАТЕЛЬ АВТОРСКИХ ПРАВ ИЛИ НИКАКОЕ ДРУГОЕ ЛИЦО, КОТОРОЕ МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО РАЗРЕШЕНО ВЫШЕ, НЕ ОТВЕТСТВЕННЫ ПЕРЕД ВАМИ ЗА УБЫТКИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СПЕЦИАЛЬНЫЕ, СЛУЧАЙНЫЕ ИЛИ ПОСЛЕДОВАВШИЕ УБЫТКИ, ПРОИСТЕКАЮЩИЕ ИЗ ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ, ИЛИ ДАННЫМИ, СТАВШИМИ НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ, ПОНЕСЕННЫМИ ИЗ-ЗА ВАС ИЛИ ТРЕТЬИХ ЛИЦ, ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ЛЮБЫМИ ДРУГИМИ ПРОГРАММАМИ), ДАЖЕ ЕСЛИ ТАКОЙ ДЕРЖАТЕЛЬ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ.

КОНЕЦ ОПРЕДЕЛЕНИЙ И УСЛОВИЙ