.. Автор: Александр Орефков
.. Автор: Артур Аюханов, 2006

.. include:: commonchm.txt

*******************************************
Дополнительные классы и ЭУ
*******************************************
..  <chminfo>
        <insert nodes="//common/maininfo/*"/>
        <alinks>_1cpp_ext_classes_</alinks>
        <toc>
            <self>
                <merge file="IndexedTable"/>
                <merge file="TableField"/>
                <merge file="ActiveX"/>
                <childstoc/>
                <merge file="guid"/>
                <merge file="BinaryData"/>
                <merge file="Math"/>
                <childstoc/>
                <merge file="Hooker"/>
                <merge file="Informer"/>
                <merge file="SettingsManager"/>
            </self>
        </toc>
    </chminfo>

.. contents:: Содержание
    :backlinks: none


В состав 1С++ входят дополнительные типы объектов и элементы управления.

- `ИндексированнаяТаблица <indexedtable.chm::/indexedtable0.html>`_
- `ТабличноеПоле <TableField.chm::/TableField0.html>`_
- `BinaryData <BinaryData.chm::/BinaryData0.html>`_
- `Math <Math.chm::/Math0.html>`_
- `Перехватчик <Hooker.chm::/Hooker0.html>`_
- `Информатор <Informer.chm::/Informer0.html>`_
- `УправлениеНастройками <SettingsManager.chm::/SettingsManager0.html>`_


#####################################################################
ФабрикаОбъектов
#####################################################################
..  <chminfo>
        <klinks>
            ФабрикаОбъектов
            ObjectFactory
        </klinks>
    </chminfo>

**Класс ФабрикаОбъектов / ObjectFactory**

**Специальный объект, позволяющий создавать объекты любых типов, как
встроенных классов 1С++ и пользовательских классов 1С++, так и классов от
1С или любых внешних компонент.**

Существуют две схемы создания объектов:

1. **Создание встроенных классов с помощью конструкторов
путем вызова метода ФабрикиОбъектов.НаименованиеСоздаваемогоТипа
с названием, совпадающим с именем типа создаваемого объекта.**

.. important::
	Метод работает на релизах 1С+ 2.0.0.0 и старше.

+

	Позволяет снабдить процесс создания объектов параметрами, число
	которых может быть различным.
	Каждый метод фабрики объектов возвращает объект одноименного типа.

Описание синтаксиса создания расположено в описании самих объектов.

Пример создания:

	- Фабрика = СоздатьОбъект("ФабрикаОбъектов");
	- ШрифтАриал10Жирный = Фабрика. Шрифт_ ("Arial", 10, 1);

На данный момент подобным образом можно создавать объекты двух классов:
"Font / Шрифт_ " и "AXControl / АктивИкс_ "

2. **Создание объектов с помощью метода ФабрикаОбъектов.Новый**

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

.. important::
	Метод работает только на релизе 1С+ 2.5 и старше.


Пример создания:
		- ДругаяТаб = СоздатьОбъект("ТаблицаЗначений");
		- Таб = Фабрика. Новый_ ("ТаблицаЗначений", "Загрузить", ДругаяТаб);
		- Таб = Фабрика. Новый_ ("ТаблицаЗначений");

	или
		- ДругаяТаб = СоздатьОбъект("ТаблицаЗначений");
		- Таб = Фабрика. Новый_ ("ИндексированнаяТаблица", "Загрузить", ДругаяТаб);
		- Таб = Фабрика. Новый_ ("ИндексированнаяТаблица");

	или
		- ОбъектКОП = Фабрика. Новый_ ("КлассСКонструкторами");
        - ОбъектКОП = Фабрика. Новый_ ("КлассСКонструкторами", "КонструкторБезПараметров");
		- ОбъектКОП = Фабрика. Новый_ ("КлассСКонструкторами", "КонструкторCКоличествомПараметров2", 1, 2);

Методы
=======================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

.. _Новый:

Новый / New
-------------------------------------------------------------------------

    **Синтаксис:** Новый(ИмяТипаИлиКласса, [ИмяКонструктора], [Парам1, Парам2, ...])

    **Параметры:**

        - **ИмяТипаИлиКласса** - тип: Строка. Имя типа. Не должен быть простым типом (Строка, Число, Дата).

        - **ИмяКонструктора** - тип: Строка. Необязательный параметр.

            Если пытаемся создать объект, который **не является классом КОП 1С++**,
        	для данного объекта должен быть определен метод-процедура с таким
        	названием. Данный метод должен принимать указанное число
        	параметров.

			Если пытаемся создать объект, который **является классом КОП 1С++**,
        	в модуле данного объекта должен быть определен
        	**метод-процедура** с необходимым названием.
        	Важно: процедура-конструктор должна быть определена без
        	атрибута Экспорт.

        	Данный метод должен принимать указанное число параметров.

        - **Парам1, Парам2, ...** - тип: Произвольный. Необязательный параметр.
        	Любое число параметров любого типа.

    **Возвращает:** Объект указанного типа.

    **Описание:** Создает объект указанного типа и сразу же вызывает для
    него метод-конструктор, если у объекта есть такой метод-процедура.

            Если  пытаемся  создать  объект,  который  **является  классом  КОП
            1С++**, и указан конструктор, отличный от дефолтного
            "Конструктор", создается объект нового класса и для него
            вместо дефолтного "Конструктор" вызывается конструктор с
            указанным именем и параметрами.
            Если имя конструктора для пользовательского класса 1С++ не
            указано, создается объект класса и для него вызывается
            процедура "Конструктор", если она определена в модуле.

            Если имя конструктора не указано,
            метод просто возвращает объект, созданный с помощью
            вызова СоздатьОбъект(ИмяТипаИлиКласса).

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

			Если пытаемся создать объект, который **является классом КОП 1С++**,
			и если найденная процедура-конструктор определена с параметром
			Экспорт, выдается исключение.

        	Если количество переданных параметров не совпадает с
        	количеством параметром, которые определены для указанного
        	метода-конструктора, выдается исключение.

.. important::
	Метод работает только на релизе 1С+ 2.5 и старше.

+

	**Пример создания:**

		- ДругаяТаб = СоздатьОбъект("ТаблицаЗначений");
		- Таб = Фабрика. Новый_ ("ТаблицаЗначений", "Загрузить", ДругаяТаб);
		- Таб = Фабрика. Новый_ ("ТаблицаЗначений");

	или
		- ДругаяТаб = СоздатьОбъект("ТаблицаЗначений");
		- Таб = Фабрика. Новый_ ("ИндексированнаяТаблица", "Загрузить", ДругаяТаб);
		- Таб = Фабрика. Новый_ ("ИндексированнаяТаблица");

	или
		- ОбъектКОП = Фабрика. Новый_ ("КлассСКонструкторами");
        - ОбъектКОП = Фабрика. Новый_ ("КлассСКонструкторами", "КонструкторБезПараметров");
		- ОбъектКОП = Фабрика. Новый_ ("КлассСКонструкторами", "КонструкторCКоличествомПараметров2", 1, 2);

.. _Шрифт:

Шрифт / Font
-------------------------------------------------------------------------

    **Синтаксис:** Шрифт([Парам1, Парам2, ...])

    **Параметры:**

        - **Парам1, Парам2, ...** - тип: Произвольный. Необязательный параметр.
        	Любое число параметров любого типа.

    **Возвращает:** Объект класс Шрифт / Font.

    **Описание:** Создает объект класс Шрифт / Font,
    вызывая для него соответствующий конструктор с нужными параметрами.

.. important::
	Метод работает на релизах 1С+ 2.0.0.0 и старше.

+

	**Пример создания:**

		- Фабрика = СоздатьОбъект("ФабрикаОбъектов");
		- ШрифтАриал10Жирный = Фабрика.Шрифт("Arial", 10, 1);

.. _АктивИкс:

АктивИкс / AXControl
-------------------------------------------------------------------------

    **Синтаксис:** АктивИкс([Парам1, Парам2, ...])

    **Параметры:**

        - **Парам1, Парам2, ...** - тип: Произвольный. Необязательный параметр.
        	Любое число параметров любого типа.

    **Возвращает:** Объект класс АктивИкс / AXControl.

    **Описание:** Создает объект класс АктивИкс / AXControl,
    вызывая для него соответствующий конструктор с нужными параметрами.

.. important::
	Метод работает на релизах 1С+ 2.0.0.0 и старше.

+

#########################################################################
Система
#########################################################################
..  <chminfo>
        <klinks>
            Система
            System
        </klinks>
    </chminfo>

**Класс Система / System**

Класс предоставляет различные вспомогательные функции.


Методы
=======================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

.. _ЗакрытьФорму:

ЗакрытьФорму / CloseForm
-------------------------------------------------------------------------

    **Синтаксис:** ЗакрытьФорму(КонтФормы, ФлагСохранения = 0)

    **Параметры:**

        - **КонтФормы** - тип: ГрупповойКонтекст.
        - **ФлагСохранения** - тип: Число. Необязательный параметр.
        	0 - закрыть форму без вопросов;
        	1 - если документ, счет, элемент справочника изменен,
        	то будет запрос о сохранении изменений.
        	Значение по  умолчанию - 0.

    **Возвращает:** Число.

        + 0 - не удалось закрыть форму.
        + 1 - форма успешно закрыта.

    **Описание:** Немедленно закрывает форму с отработкой всех событий, обработчики которых есть в форме.

    	В отличие от метода КонтФормы.Форма.Закрыть([ФлагСохранения]), который
		закрывает форму не сразу, а только после завершения работыпользовательского кода,
	    данный метод не ждет завершения кода, а закрывает форму немедленно.
	    Т.е. управление к следующей строке после вызова
	    Система.ЗакрытьФорму будет передано только после закрытия формы.

	    **После выполнения данного метода ТипЗначения(КонтФормы) = 0 !** ,
		т.к. форма закрыта, и все групповые контексты, которые указывали
		на эту форму, стали недействительными.

    	В случае, если первый параметр не является групповым контекстом, выдается исключение.
	    В случае, если второй параметр не является числом, выдается исключение.

    **Версия:** Метод работает на релизе 2.5 и позже, а также 2.0.3.2


.. _Уснуть:

Уснуть / Sleep
-------------------------------------------------------------------------

    **Синтаксис:** Уснуть(КоличествоМиллисекунд)

    **Параметры:**

        - **КоличествоМиллисекунд** - тип: Число. .

    **Описание:** Делает паузу путем вызова системной функции Sleep(КоличествоМиллисекунд).

    **Версия:** Метод работает на релизе 2.5 и позже, а также 2.0.3.2


#########################################################################
РеестрWin
#########################################################################
..  <chminfo>
        <klinks>
            РаботаСРегистромWin
            WorkAsRegisterWin
            РеестрWin
            RegistryWin
        </klinks>
    </chminfo>

**Класс РеестрWin / RegistryWin**

**Класс РаботаСРегистромWin / WorkAsRegisterWin**

Предназначен для работы с реестром "Windows" в стиле языка 1С : Предприятия.

Позволяет:

- создавать, открывать ключи реестра, подключаться к реестру удаленного компьютера;
- добавлять в ключи строковые и числовые значения, удалять значения из ключей реестра;
- перебирать ключи и значения ключей;
- организовывать поиск ключа или значения по имени.

Методы
=======================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

СоздатьКлюч / CreateKey
-------------------------------------------------------------------------
.. _СоздатьКлюч:

    **Синтаксис:** СоздатьКлюч(Ключ, Имя, Режим)

    **Параметры:**

        - Ключ - тип: Строка. Название ветви реестра. Названия строго определены и бывают
          следующих видов:

            - HKEY_CLASSES_ROOT
            - HKEY_CURRENT_CONFIG
            - HKEY_CURRENT_USER
            - HKEY_LOCAL_MACHINE
            - HKEY_USERS

        - Имя - тип: Строка. Названием ключа реестра. (например: "Software\\1C\\1Cv7\\7.7")
        - Режим - тип: Строка. Режим создания ключа. Названия строго определены и бывают
          следующих видов:

            - KEY_CREATE_LINK   Permission to create a symbolic link.
            - KEY_CREATE_SUB_KEY    Permission to create subkeys.
            - KEY_ENUMERATE_SUB_KEYS    Permission to enumerate subkeys.
            - KEY_EXECUTE   Permission for read access.
            - KEY_NOTIFY    Permission for change notification.
            - KEY_QUERY_VALUE   Permission to query subkey data.
            - KEY_SET_VALUE Permission to set subkey data.
            - KEY_ALL_ACCESS    Combines the KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, and KEY_SET_VALUE access rights, plus all the standard access rights except SYNCHRONIZE.
            - KEY_READ  Combines the STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, and KEY_NOTIFY access rights.
            - KEY_WRITE Combines the STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, and KEY_CREATE_SUB_KEY access rights

    **Возвращает:** Число.

        + -1 - ошибка
        + 0 - ключ с таким названием уже существует и будет просто открыт
        + 1 - ключ успешно создан

    **Описание:** Создает в реестре ключ с указанным именем.


ОткрытьКлюч / OpenKey
-------------------------------------------------------------------------
.. _ОткрытьКлюч:

    **Синтаксис:** ОткрытьКлюч(Ключ, Имя, Режим)

    **Параметры:**

        - Ключ - тип: Строка. Название ветви реестра. Названия строго определены и бывают следующих видов:

          - HKEY_CLASSES_ROOT
          - HKEY_CURRENT_CONFIG
          - HKEY_CURRENT_USER
          - HKEY_LOCAL_MACHINE
          - HKEY_USERS

        - Имя - тип: Строка. Названием ключа реестра. (например: "Software\\1C\\1Cv7\\7.7")
        - Режим - тип: Строка. Режим создания ключа. Названия строго определены и бывают следующих видов:

            - KEY_CREATE_LINK   Permission to create a symbolic link .
            - KEY_CREATE_SUB_KEY    Permission to create subkeys.
            - KEY_ENUMERATE_SUB_KEYS    Permission to enumerate subkeys.
            - KEY_EXECUTE   Permission for read access.
            - KEY_NOTIFY    Permission for change notification.
            - KEY_QUERY_VALUE   Permission to query subkey data.
            - KEY_SET_VALUE Permission to set subkey data.
            - KEY_ALL_ACCESS    Combines the KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, and KEY_SET_VALUE access rights, plus all the standard access rights except SYNCHRONIZE.
            - KEY_READ  Combines the STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, and KEY_NOTIFY access rights.
            - KEY_WRITE Combines the STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, and KEY_CREATE_SUB_KEY access rights

    **Возвращает:** Число.

        + 0 - ошибка
        + 1 - ключ открыт

    **Описание:** Открывает ключ реестра с указанным именем.


ПодключитьРегистр / ConnectRegistry
-------------------------------------------------------------------------
    **Синтаксис:** ПодключитьРегистр(ИмяУдаленногоКомпьютера, Ключ)

    **Параметры:**

        - ИмяУдаленногоКомпьютера - тип: Строка. Cетевое имя компьютера,
          к реестру которого необходимо подключиться (например: \\computername).
          Если указать пустую строку, то метод подключится к локальной машине.
        - Ключ - тип: Cтрока. Название ветви реестра. Названия строго определены и
          бывают следующих видов:

            - HKEY_LOCAL_MACHINE
            - HKEY_USERS

    **Возвращает:** Число.

        + 0 - ошибка
        + 1 - соединение установлено

    **Описание:** Подключает объект к реестру удаленного компьютера.

    **Примечание:** для возможности успешного подключения к компьютеру с установленной
    операционной системой Windows 95 необходимо инсталлировать на нем
    "Microsoft Remote Registry service".


УдалитьКлюч / DeleteKey
-------------------------------------------------------------------------
    **Синтаксис:** УдалитьКлюч(ИмяПодКлюча)

    **Параметры:**

        - ИмяПодКлюча - тип: Строка. Имя удаляемого подключа.

    **Возвращает:** Число.

        + 0 - была ошибка
        + 1 - удаление закончено успешно

    **Описание:** Удаляет подключ ключа, открытого ранее функцией ОткрытьКлюч_ или СоздатьКлюч_.


УдалитьЗначение / DeleteValue
-------------------------------------------------------------------------
    **Синтаксис:** УдалитьЗначение(ИмяЗначения)

    **Параметры:**

        - ИмяЗначения - тип: Строка. Имя удаляемого значения.

    **Возвращает:** Число.

        + 0 - была ошибка
        + 1 - удаление закончено успешно

    **Описание:** Удаляет значение в ключе, открытом ранее функцией ОткрытьКлюч_ или СоздатьКлюч_.


УстановитьЗначение / SetValue
-------------------------------------------------------------------------
    **Синтаксис:** УстановитьЗначение(ИмяЗначения, ТипЗначения, Значение)

    **Параметры:**

        - ИмяЗначения - тип: Строка. Название значения в ключе.
        - ТипЗначения - тип: Строка. Может принимать только два значения:

            - "REG_SZ" - тип значения строка
            - "REG_DWORD" - тип значения целое число

        - Значение - тип: Строка, Число. Значение, которое необходимо установить,
          зависит от типа, установленного в предыдущем параметре.

    **Возвращает:** Число.

        + 0 - была ошибка
        + 1 - установка закончена успешно

    **Описание:** Устанавливает значение, указанное в параметре ИмяЗначения ключа,
    открытого ранее функцией ОткрытьКлюч_ или СоздатьКлюч_.


ЗапроситьЗначение / QueryValue
-------------------------------------------------------------------------
    **Синтаксис:** ЗапроситьЗначение(ИмяЗначения, Значение)

    **Параметры:**

        - ИмяЗначения - тип: Строка. Название значения в ключе.
        - Значение - тип: Имя переменной. Переменная для приема запрошенного значения.

    **Возвращает:** Число.

        + 0 - была ошибка
        + 1 - запрос закончен успешно

    **Описание:** Запрашивает значение, указанное в параметре ИмяЗначения ключа,
    открытого ранее функцией ОткрытьКлюч_ или СоздатьКлюч_.

    **Примечание:** Если операция выполнена успешно, то результат будет в Значение.
    Тип значений, которые можно получить, может быть только "REG_SZ" или "REG_DWORD".


ВыбратьКлючи / ChooseKeys
-------------------------------------------------------------------------
.. _ВыбратьКлючи:

    **Синтаксис:** ВыбратьКлючи()

    **Возвращает:** Число. Количество выбранных подключей.

    **Описание:** Открывает выборку подключей ключа, установленного функцией ОткрытьКлюч_
    или СоздатьКлюч_.


ПолучитьКлюч / GetKey
-------------------------------------------------------------------------
    **Синтаксис:** ПолучитьКлюч(ИмяПодКлюча)

    **Параметры:**

        - ИмяПодКлюча - тип: Имя переменной. Переменная для приема названия подключа.

    **Возвращает:** Число.

        + 0 - выборка пуста
        + 1 - в выборке еще есть подключи

    **Описание:** Получает следующее название подключа из выборки, открытой
    ранее методом ВыбратьКлючи_.


ВыбратьЗначения / ChooseValues
-------------------------------------------------------------------------
.. _ВыбратьЗначения:

    **Синтаксис:** ВыбратьЗначения()

    **Возвращает:** Число. Количество - значений в выборке.

    **Описание:** Открывает выборку значений ключа, установленного функцией ОткрытьКлюч_ или СоздатьКлюч_.





ПолучитьЗначение / GetValue
-------------------------------------------------------------------------
    **Синтаксис:** ПолучитьЗначение(ИмяЗначения)

    **Параметры:**

        - ИмяЗначения - тип: Имя переменной. Переменная, в которую возвращается строковое название значения.

    **Возвращает:** Число.

        + 0 - выборка пуста
        + 1 - в выборке еще есть значения

    **Описание:** Получает следующее название значения из выборки, открытой
    ранеее методом ВыбратьЗначения_.


ОтладочныеСообщения
-------------------------------------------------------------------------
    **Синтаксис:** ОтладочныеСообщения(Включить)

    **Параметры:**

        - Включить - тип: Число.

            + 0 - Отключить
            + 1 - Включить

    **Описание:** Включает/отключает отладочные сообщения при возникновении ошибок
    работы с реестром.


ЗаписатьВсеАтрибуты
-------------------------------------------------------------------------
    **Синтаксис:** ЗаписатьВсеАтрибуты()

    **Описание:** Немедленно записать изменения, внесенные ранее в реестр.


#########################################################################
ВыполняемыйМодуль
#########################################################################
..  <chminfo>
        <klinks>
            ВыполняемыйМодуль
            ExecuteModule
        </klinks>
    </chminfo>

**Класс ВыполняемыйМодуль / ExecuteModule**

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

После установки текста модуля скомпилируйте и выполните его.
Модуль инициализируется и выполнит операторы, расположенные в конце тела
модуля, вне методов. После этого можно обращаться к переменным модуля,
как к свойствам этого объекта, и к методам модуля, как к методам объекта.

Свойства
=================================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

<ИмяПеременной>
-----------------------------------------------------------

    **Доступ:** чтение и запись.

    **Тип:** Любой.

    **Описание:** Позволяет обращаться к переменным модуля, объявленным
    в тексте модуля, как к свойствам объекта.


Методы
=================================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

<ИмяМетода>
-------------------------------------------------------------------------
    **Синтаксис:** Соответствует синтаксису метода модуля.

    **Параметры:** Соответствуют параметрам меода модуля.

    **Описание:** Позволяет обращаться к методам, определенным
    в тексте модуля, как к своим методам.

УстановитьМодуль / AssignSource
-------------------------------------------------------------------------
.. _УстановитьМодуль:

    **Синтаксис:** УстановитьМодуль(стрТекстМодуля)

    **Параметры:**

        - стрТекстМодуля - тип: Строка. Текст модуля.

    **Описание:** Устанавливает текст модуля на выполнение.

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


НазначитьКонтекст / AssignContext
-------------------------------------------------------------------------
    **Синтаксис:** НазначитьКонтекст(Контекст)

    **Параметры:**

        - Контекст - тип: ГрупповойКонтекст, АгрегатныйОбъект. Назначаемый контекст.

    **Описание:** Устанавливает контекст модуля.

    Метод должен вызыватся до компиляции модуля. При этом к методам и
    свойствам назначенного контекста в тексте модуля можно будет обращаться
    напрямую, без указания имени объекта.


ПрисоединитьТекущийМодуль / AssignFriendModule
-------------------------------------------------------------------------
    **Синтаксис:** ПрисоединитьТекущийМодуль()

    **Описание:** Присоединяет модуль, который в данный момент выполняется.

    Это позволяет в установленном модуле объекта обращаться напрямую к переменным и методам
    текущего модуля (т.е. модуля, в котором идет работа в данный момент с объектом
    класса ВыполняемыйМодуль_).



КомпилироватьМодуль / Compile
-------------------------------------------------------------------------
.. _КомпилироватьМодуль:

    **Синтаксис:** КомпилироватьМодуль()


    **Возвращает:** Число.

        + 1, если компиляция прошла успешно
        + 0 в случае неудачи

    **Описание:** Компилирует модуль, установленный с помощью метода УстановитьМодуль_.

.. _ВыполнитьМодуль:

ВыполнитьМодуль / Execute
-------------------------------------------------------------------------
    **Синтаксис:** ВыполнитьМодуль()

    **Возвращает:** Число.

        + 1, если выполнение начато успешно
        + 0 в случае неудачи

    **Описание:** Выполняет модуль, установленный с помощью метода УстановитьМодуль_ и
    откомпилированный методом КомпилироватьМодуль_.

    При этом происходит инициализация выполнения модуля и выполняются операторы
    тела модуля. После этого ВыполняемыйМодуль_ готов к использованию, и
    позволяет обращаться к переменным и методам модуля, как к своим свойствам
    и методам.


GetMethOfContext
-------------------------------------------------------------------------
    **Синтаксис:** GetMethOfContext(Объект, тзМетоды = 0, тзСвойства = 0)

    **Параметры:**

        - **Объект** - тип: Контекст, АгрегатныйОбъект. Объект, для которого необходимо получить описание.
        - **тзМетоды** - тип: ТаблицаЗначений. ТЗ, в которую будет возвращено описание методов объекта.
        - **тзСвойства** - тип: ТаблицаЗначений. ТЗ, в которую будет возвращено описание свойств объекта.

    **Описание:** Предоставляет информацию о методах и свойствах объекта.

    Если задана хотя бы одна из таблиц (тзМетоды, тзСвойства), описание возвращается в соотв. таблице.
    Иначе описание выводится в окно сообщений.

    **Вместо данного метода удобнее использовать соответствующие методы
    класса "Информатор" - ПолучитьТаблицуМетодов и ПолучитьТаблицуСвойств.**

СформироватьОшибку / RaiseError
-------------------------------------------------------------------------
    **Синтаксис:** СформироватьОшибку(ТекстОшибки)

    **Параметры:**

        - ТекстОшибки - тип: Строка. Сообщение об ошибке.

    **Описание:** Останавливает выполнение текущего модуля.

    При этом выводится сообщение об ошибке, переданное в параметре метода ТекстОшибки.


ОчиститьПозициюПроведения / ErasePostState
-------------------------------------------------------------------------
.. _ОчиститьПозициюПроведения:

    **Синтаксис:** ОчиститьПозициюПроведения()

    **Описание:** Очищает позицию проведения и сохраняет текущую в объекте.

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

    **Внимание! Проверка работоспособности метода была произведена только на релизе 1С 7.70.017.**


ВосстановитьПозициюПроведения / RestorePostState
-------------------------------------------------------------------------
.. _ВосстановитьПозициюПроведения:

    **Синтаксис:** ВосстановитьПозициюПроведения()

    **Описание:** Восстанавливает позицию проведения текущего документа,
    очищенную с помощью метода ОчиститьПозициюПроведения_.

    Методы ОчиститьПозициюПроведения_ и ВосстановитьПозициюПроведения необходимо вызывать
    всегда в паре в указанной последовательности!!!

    **Внимание! Проверка работоспособности метода была произведена только на релизе 1С 7.70.017.**


ВыброситьИскл / Throw
-------------------------------------------------------------------------
.. _ВыброситьИскл:

    **Синтаксис:** ВыброситьИскл(ОбъектИскл, [ТекстИскл])

    **Параметры:**

        - ОбъектИскл - тип: Любой. Параметр, который потом можно получить при
          обработке исключения методом ПолучитьИсключение_.
        - ТекстИскл - тип: Строка. Сообщение об ошибке. По умолчанию "".

    **Описание:** Формирует исключение с объектом, который можно получить при
    перехвате/обработке исключения с помощью метода ПолучитьИсключение_.

    При обработке исключения текст сообщения об ошибке можно получить
    с помощью глобальной функции *ОписаниеОшибки()*. Если исключение не
    обработано, этот текст будет выведен в окно сообщений.


ПолучитьИсключение / GetExeption
-------------------------------------------------------------------------
.. _ПолучитьИсключение:

    **Синтаксис:** ПолучитьИсключение()

    **Возвращает:** объект-исключение, параметр ОбъектИскл, переданный в
    метод ВыброситьИскл_.

    **Описание:** Получает объект исключения.

    Используется в обработчиках исключений для получения объекта исключения,
    переданного в метод ВыброситьИскл_, или метода функционала класса
    `_ВыброситьИскл|_1cpp_oop__throw_ <alink>`_.

.. _КомпилироватьИВыполнитьМодуль:

КомпилироватьИВыполнитьМодуль / CompileAndExecute
-------------------------------------------------------------------------
    **Синтаксис:** КомпилироватьИВыполнитьМодуль()

    **Описание:** Компилирует и выполняет модуль, установленный с помощью
    метода УстановитьМодуль_ .

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


РазрешитьИсключения / EnableExceptions
-------------------------------------------------------------------------
    **Синтаксис:** РазрешитьИсключения()

    **Описание:** Включает флаг выдачи исключений вместо показа ошибок в
    окне сообщений.

    После выполнения данного метода методы ВыполнитьМодуль_, КомпилироватьМодуль_
    вызывают исключение в случае ошибки, а не выдают сообщение в окно сообщений.
    В случае ошибок синтаксиса в тексте модуля или ошибок выполнения
    генерируется исключение.
    Метод КомпилироватьИВыполнитьМодуль_ всегда выбрасывает исключения,
    независимо от выполнения данного метода.

.. _ВыполнитьПроцедуруКонтекста:

ВыполнитьПроцедуруКонтекста / CallContextProcedure
-------------------------------------------------------------------------

    **Синтаксис:** ВыполнитьПроцедуруКонтекста(Объект, ИмяПроцедуры, СписокАргументов)

    **Параметры:**

        - **Объект** - тип: Агрегатный.
        - **ИмяПроцедуры** - тип: Строка.
        - **СписокАргументов** - тип: СписокЗначений. Список аргументов для упомянутой процедуры.

    **Возвращает:** 1, если процедура существует, или 0, если нет.

    **Описание:** Выполняет процедуру для переданного объекта, если у объекта есть процедура с таким именем.
    Если найдена функция с таким именем, выдается исключение.

    В случае, если первый параметр не является агрегатным типом (Строка,Число и т.д.), выдается исключение.
    В случае, если второй параметр не является строкой или строка пуста, выдается исключение.
    В случае, если третий параметр не является списком значений, выдается исключение.


.. _ВыполнитьФункциюКонтекста:

ВыполнитьФункциюКонтекста / CallContextFunction
-------------------------------------------------------------------------

    **Синтаксис:** ВыполнитьФункциюКонтекста(Объект, ИмяПроцедуры, СписокАргументов, РезультатРаботыФункции)

    **Параметры:**

        - **Объект** - тип: Агрегатный.
        - **ИмяПроцедуры** - тип: Строка.
        - **СписокАргументов** - тип: СписокЗначений. Список аргументов для упомянутой процедуры.
        - **РезультатРаботыФункции** - тип: Число.

    **Возвращает:** 1, если функция существует, или 0, если нет.

    **Описание:** Выполняет функцию для переданного объекта, если у объекта есть функция с таким именем.
    Если найдена процедура с таким именем, выдается исключение.

    В случае, если первый параметр не является агрегатным типом (Строка,Число и т.д.), выдается исключение.
    В случае, если второй параметр не является строкой или строка пуста, выдается исключение.
    В случае, если третий параметр не является списком значений, выдается исключение.

#########################################################################
Делегат
#########################################################################
..  <chminfo>
        <klinks>
            Делегат
            Delegate
        </klinks>
    </chminfo>

**Класс Делегат / Delegate**

Данный класс представляет собой хранилище ссылок на методы экземпляров агрегатных
объектов 1С. С помощью этого класса возможно вызывать группу методов с одинаковой
сигнатурой (возвращаемый параметр, количество параметров или их отсутствие).

Использование делегата позволяет писать обобщенные алгоритмы и делать групповые вызовы методов.

Методы
=================================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>


.. _ОпределитьТип:

ОпределитьТип / DefineType
-------------------------------------------------------------------------
    :Синтаксис:
        ОпределитьТип(чКолПарам, флЕстьВозврат, [флПрерыватьВыполнение = 0])

    :Параметры:

        - *чКолПарам*: Число
            Количество параметров, которые будут передаваться в методы делегата

        - *флЕстьВозврат*: Число
            Флаг наличия возвращаемого значения

            + 1 - методы в делегате есть функции
            + 0 - методы в делегате есть процедуры

        - *флПрерыватьВыполнение*: Число
            Флаг прерывания выполнения по условию

            + 1 - методы Вызвать_ и ВызватьПоКлючу_ прерывают выполнение цепочки, если при вызове очередной функции возвращенное значение равно 0
            + 0 - методы Вызвать_ и ВызватьПоКлючу_ всегда проходят цепочку вызова полностью

    :Возвращает:
        нет

    :Описание:
        | Задает сигнатуру хранимых в Делегате методов.
        | Сигнатура - количество параметров и тип (функция / процедура) методов

.. _Добавить:

Добавить / AddMethod
-------------------------------------------------------------------------
    :Синтаксис:
        Добавить(ЭкземплярАгрегатногоОбъекта, стрИмяМетода, [стрКлюч = ""])

    :Параметры:

        - *ЭкземплярАгрегатногоОбъекта*: ГрупповойКонтекст, АгрегатныйОбъект
            Объект, метод которого будет сохранен для вызова
        - *стрИмяМетода*: Строка
            Имя метода, который будет вызван
        - *стрКлюч*: Строка
            Если указан - можно вызывать метод по указанному ключу
            с помощью метода делегата ВызватьПоКлючу_

            | По умолчанию используется ключ ""
            | Возможна реализация обработчика по умолчанию для ситуаций вызова по несуществующим ключам
            | (см. описание метода ВызватьПоКлючу_)

    :Возвращает:
        Число

        + 1 - добавление метода прошло успешно

    :Описание:
        | Устанавливает/добавляет в делегат ссылки на метод агрегатного объекта для его дальнейшего вызова
        | Сигнатура метода объекта для установки должна соответствовать указанной в ОпределитьТип_

    :Примечание:
        | Возможно использование одинаковых методов для любых сочетаний ключей и агрегатных объектов
        | Количество ключей не регламентируется
        | Количество методов в пределах ключа не регламентируется
        | Ключи и имена методов являются регистронезависимыми

Удалить / RemMethod
-------------------------------------------------------------------------
    :Синтаксис:
        Удалить(ЭкземплярАгрегатногоОбъекта, стрИмяМетода)

    :Параметры:

        - *ЭкземплярАгрегатногоОбъекта*: ГрупповойКонтекст, АгрегатныйОбъект
            Объект, ссылка на метод которого была сохранена ранее
        - *стрИмяМетода*: Строка
            Имя метода, ссылка на который была сохранена ранее

    :Возвращает:
        Число

        + 1 - удаление прошло успешно
        + 0 - ссылок не найдено

    :Описание:
        Удаляет все ссылки на заданный метод указанного агрегатного объекта во всех ключах

УдалитьПоКлючу / RemMethodByKey
-------------------------------------------------------------------------
    :Синтаксис:
        УдалитьПоКлючу(стрКлюч)

    :Параметры:

        - *стрКлюч*: Строка
            Ключ, по которому происходит поиск методов объектов

    :Возвращает:
        Число

        + 1 - удаление прошло успешно
        + 0 - для указанного ключа ссылок не найдено

    :Описание:
        | Удаляет все ссылки на методы агрегатных объектов по заданному ключу
        | Ключ задается при добавлении ссылки на метод, третьим параметром в Добавить_

.. _Вызвать:

Вызвать / Invoke
-------------------------------------------------------------------------
    :Синтаксис:
        Вызвать(...)

    :Параметры:
        - *...*:
            Количество параметров или их отсутствие определяется сигнатурой делегата,
            заданной ранее методом ОпределитьТип_

    :Возвращает:
        Наличие и тип возвращаемого значения определяется сигнатурой делегата

    :Описание:
        Вызывает все методы всех ключей, находящихся в делегате,
        с учетом параметра чПрерыватьВыполнение, заданного ранее методом ОпределитьТип_

    :Примечание:
        | Порядок вызова в пределах ключа регламентируется порядком добавления метода в делегат методом Добавить_.
        | Порядок перебора ключей не определен.

.. _ВызватьПоКлючу:

ВызватьПоКлючу / InvokeByKey
-------------------------------------------------------------------------
    :Синтаксис:
        ВызватьПоКлючу(стрКлюч, ...)

    :Параметры:

        - *стрКлюч*: Строка
            Ключ, по которому происходит поиск ссылки
        - *...*:
            Количество параметров или их отсутствие определяется сигнатурой делегата,
            заданной ранее методом ОпределитьТип_

    :Возвращает:
        Наличие и тип возвращаемого значения определяется сигнатурой делегата

    :Описание:
        Вызывает все методы указанного ключа, находящиеся в делегате,
        с учетом параметра чПрерыватьВыполнение, заданного ранее методом ОпределитьТип_

    :Примечание:
        Порядок вызова в пределах ключа регламентируется порядком добавления метода в делегат
        методом Добавить_

    :Обработчик по умолчанию:
        Если указанный ключ в делегате не задан, вызывается обработчик по умолчанию
        по ключу "__default" (должен быть предварительно определен методом Добавить_)

        | Если обработчик по умолчанию также не задан, не вызывается ничего
        | Обработчик по умолчанию учитывает значение параметра чПрерыватьВыполнение в общем порядке

Очистить / Erase
-------------------------------------------------------------------------
    :Синтаксис:
        Очистить()

    :Описание:
        | Удаляет из делегата все установленные в нем ранее методы для всех ключей.
        | Сигнатура делегата после выполнения метода Очистить() не определена.

Пустой / IsEmpty
-------------------------------------------------------------------------
    :Синтаксис:
        Пустой()

    :Возвращает:
        Число

        + 1, если делегат не содержит ссылок на методы
        + 0, если содержит

    :Описание:
        Проверяет наличие сохраненных ссылок

#########################################################################
МенеджерСобытий
#########################################################################
..  <chminfo>
        <klinks>
            МенеджерСобытий
            EventManager
        </klinks>
    </chminfo>

**Класс МенеджерСобытий / EventManager**

Данный класс предназначен для обработки событий, возникающих в классах КОП
и других контекстах использования менеджера.

Например: Есть класс, который формирует различные события и называется он
"ФабрикаСобытий" (издатель событий). Предположим, что обращение к его открытым
методам "Событие_1" и  "Событие_2" приводят к возникновению событий в системе
от этого класса. Далее, у нас есть несколько классов, которые хотят подписаться
на события (подписчики событий), формируемые классом "ФабрикаСобытий",
назовем их "ОбработчикСобытий_1" и "ОбработчикСобытий_2".
Экземпляры классов-обработчиков событий (подписчиков) определяют свои методы,
которые будут вызываться при возникновении в экземпляре класса "ФабрикаСобытий"
определенных событий. Далее опишем методы класса "МенеджерСобытий"
и приведём с краткими пояснениями пример кода,  реализующий описанную схему.

Методы
=================================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

Пустой / IsEmpty
-------------------------------------------------------------------------
    **Синтаксис:** Пустой()

    **Возвращает:** Число.

        + 1, подписчиков нет
        + 0, подписчики есть

    **Описание:** Проверяет наличие в менеджере событий подписчиков.

ДобавитьОбработчикСобытия / AddEventHandle
-------------------------------------------------------------------------
.. _ДобавитьОбработчикСобытия:

    **Синтаксис:** ДобавитьОбработчикСобытия(копПодписчик, стрИмяМетода)

    **Параметры:**

        - копПодписчик - тип: КОП. Экземпляр класса-подписчика.
        - стрИмяМетода - тип: Строка. Имя метода-обработчика класса-подписчика,
          который будет вызываться при возникновении событий, управляемых
          классом-менеджером.

    **Возвращает:** Число.

        + 1 - Добавление подписчика прошло успешно
        + 0 - Данный подписчик с таким методом уже зарегистрирован в менеджере событий

    **Описание:** Подписывает на событие экземпляр класса-подписчика событий.

    Метод-обработчик события должен быть членом класса-подписчика и принимать
    два параметра по умолчанию:

    - Publisher или Издатель, в этот параметр передается экземпляр класса - издателя
    - ExtParametrs или ДопПараметры, в этот параметр передается любая информация,
      посланная с помощью метода ПослатьСобытие_.

    Количество параметров, заданных по умолчанию, возможно изменить с помощью
    установки отдельно созданного делегата - передать его в качестве параметра метода
    УстановитьДелегата_, или передать число параметров в метод УстановитьКоличествоПараметров_.

    Каждый метод-обработчик обязан возвращать числовое значение.
    Если функция возвращает 0, то цепочка обработки события прерывается на данном
    подписчике, т.е. если у нас есть менеджер событий, в котором зарегистрировано
    5 подписчиков и 2-ой по счету в своей функции возвращает 0, то 3 последующих
    подписчика не получат данное событие, другими словами - рассылка будет прервана
    на подписчике с номером 2. Если же функция возвращает любое другое числовое значение,
    отличное от нуля, то рассылка события менеджером не прерывается.

УдалитьОбработчикСобытия / RemEventHandle
-------------------------------------------------------------------------
    **Синтаксис:** УдалитьОбработчикСобытия(копПодписчик, стрИмяМетода)

    **Параметры:**

        - копПодписчик - тип: КОП. Экземпляр класса-подписчика.
        - стрИмяМетода - тип: Строка. Имя метода-обработчика класса-подписчика.

    **Возвращает:** Число.

        + 1 - с подписки снят
        + 0 - нет, данный подписчик ранее не был зарегистрирован методом
          ДобавитьОбработчикСобытия_.

    **Описание:** Снимает с подписки экземпляр класса-подписчика,
    ранее подписавшегося на него с помощью ДобавитьОбработчикСобытия_.

ПослатьСобытие / SendEvent
-------------------------------------------------------------------------
.. _ПослатьСобытие:

    **Синтаксис:** ПослатьСобытие(Издатель, ДопПараметр)

    **Параметры:**

        - Издатель - тип: ГрупповойКонтекст, КОП.
          Контекст окружения, в котором возникло событие или контекст экземпляра класса-издателя
        - ДопПараметр - тип: Любой.
          Любая дополнительная информация, которая будет доступна в методе экземпляра
          класса-подписчика во втором параметре.

    **Возвращает:** Число.

        + 1 - цепочка рассылки событий пройдена полностью
        + 0 - рассылка была прервана одним из подписчиков

    **Описание:** Посылает событие всем зарегистрировавшимся подписчикам на него.

УстановитьДелегата / SetDelegate
-------------------------------------------------------------------------
.. _УстановитьДелегата:

    **Синтаксис:** УстановитьДелегата(ЭкземплярДелегата)

    **Параметры:**

        - ЭкземплярДелегата - тип: Делегат_. Экземпляр делегата, через который
          будет осуществляться вызов методов-обработчиков.

    **Возвращает:** Делегат_. Установленный ранее делегат, или делегат по умолчанию,
    содержащийся в текущем менеджере событий.

    **Описание:** Устанавливает делегата для вызова методов-обработчиков.

Очистить / Clear
-------------------------------------------------------------------------
    **Синтаксис:** Очистить()

    **Параметры:**

    **Описание:** Очищает менеджер событий от подписчиков.

УстановитьКоличествоПараметров / SetCountOfParams
-------------------------------------------------------------------------
.. _УстановитьКоличествоПараметров:

    **Синтаксис:** УстановитьКоличествоПараметров(чКолвоПарам)

    **Параметры:**

        - чКолвоПарам - тип: Число. Новое количество параметров.

    **Описание:** Устанавливает количество параметров, которые должны принимать подписчики
    и количество параметров, которые необходимо передавать в метод ПослатьСобытие_.

    Данный метод удаляет всех подписчиков, установленных ранее в менеджере событий.

Пример кода
=================================================
..  <chminfo>
        <topictitle>
            <a class="toc-backref" href="parent"><title to="parent"/></a> :: <title to="selfremove"/>
        </topictitle>
    </chminfo>

Определение класса "ФабрикаСобытий"::

    класс ФабрикаСобытий=EventFactory.ert
    {
        void Событие_1();
        void Событие_2();
    };

Реализация класса "ФабрикаСобытий" файл EventFactory.ert::

    Перем МенеджерСобытий1 Экспорт;
    Перем МенеджерСобытий2 Экспорт;

    Функция GetThis(Конт) Возврат Конт; КонецФункции

    Процедура Конструктор()
        МенеджерСобытий1 = СоздатьОбъект("МенеджерСобытий");
        МенеджерСобытий2 = СоздатьОбъект("МенеджерСобытий");
    КонецПроцедуры

    Процедура Событие_1()
        Если МенеджерСобытий1.Пустой() = 0 Тогда
            МенеджерСобытий1.ПослатьСобытие(GetThis(Контекст), "Событие произошло!");
        КонецЕсли;
    КонецПроцедуры
    Процедура Событие_2()
        Если МенеджерСобытий2.Пустой() = 0 Тогда
            сз = СоздатьОбъект("СписокЗначений");
            сз.ДобавитьЗначение(100, "Парам1");
    сз.ДобавитьЗначение(200, "Парам2");
    сз.ДобавитьЗначение(300, "Парам3");
            МенеджерСобытий2.ПослатьСобытие(GetThis(Контекст), сз);
        КонецЕсли;
    КонецПроцедуры

Определим классы подписчики "ОбработчикСобытий_1" и "ОбработчикСобытий_2",
в нашем примере определение этих классов будет одинаково::

    класс ОбработчикСобытий_1=TreaterEvetns_1.ert
    {
        Число ОбработкаСобытия_1(Неопределенный, Строка);
        Число ОбработкаСобытия_2(Неопределенный, СписокЗначений);
    };

Реализация этих классов может быть любая, в нашем примере она тривиальна и ее описание опустим.

В любом модуле системы для запуска механизма обработки событий пишем следующий код::

    ОбрСобытий_1 = СоздатьОбъект("ОбработчикСобытий_1");
    ОбрСобытий_2 = СоздатьОбъект("ОбработчикСобытий_2");
    ФабрикаСобытий = СоздатьОбъект("ФабрикаСобытий");

    // Регистрируем подписчиков и их методы - обработчики событий
    ФабрикаСобытий.МенеджерСобытий1.ДобавитьОбработчикСобытия(ОбрСобытий_1, "ОбработкаСобытия_1");
    ФабрикаСобытий.МенеджерСобытий1.ДобавитьОбработчикСобытия(ОбрСобытий_2, "ОбработкаСобытия_1");

    ФабрикаСобытий.МенеджерСобытий2.ДобавитьОбработчикСобытия(ОбрСобытий_1, "ОбработкаСобытия_2");
    ФабрикаСобытий.МенеджерСобытий2.ДобавитьОбработчикСобытия(ОбрСобытий_2, "ОбработкаСобытия_2");

    // Вызываем методы, которые формирую событие (издают)
    ФабрикаСобытий.Событие_1();
    ФабрикаСобытий.Событие_2();
    // Далее происходит вызов всех методов зарегистрированных в менеджере экземпляров классов - подписчиков.


#########################################################################
Структура
#########################################################################
..  <chminfo>
        <klinks>
            Структура
            Struct
        </klinks>
    </chminfo>

**Класс Структура / Struct**

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

Свойства
=======================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

<ИмяСвойства>
-----------------------------------
    **Доступ:** чтение и запись.

    **Тип:** Любой.

    **Описание:** Позволяет обратиться к свойству, добавленному
    методом Вставить_.


Методы
=======================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

Вставить / Insert
-------------------------------------------------------------------------
.. _Вставить:

    **Синтаксис:** Вставить(стрКлюч, [нЗначение], [чРежим])

    **Параметры:**

        - стрКлюч - тип: Строка. Название свойства структуры.

          Если такое свойство уже существует - то его значение изменяется,
          если не существует - создается новое

        - нЗначение - тип: Любой. Значение свойства, которое необходимо установить.
        - чРежим - тип: Число.

          + 0 - нЗначение сохраняется в структуре по ссылке
          + 1 - нЗначение сохраняется в структуре по значению

          По умолчанию - 1.

    **Описание:** Добавляет свойство в структуру.

    В структуре хранятся копии нЗначение.

Количество / Count
-------------------------------------------------------------------------
.. _Количество:

    **Синтаксис:** Количество()

    **Возвращает:** Число. Количество свойств структуры.

    **Описание:** Возвращает количество свойств структуры, добавленных
    методом Вставить_.

Очистить / Clear
-------------------------------------------------------------------------
.. _Очистить:

    **Синтаксис:** Очистить()

    **Описание:**  Удаляет все свойства структуры.


Свойство / Property
-------------------------------------------------------------------------
.. _Свойство:

    **Синтаксис:** Свойство(стрКлюч, [нЗначение])

    **Параметры:**

        - стрКлюч - тип: Строка. Название для поиска свойства структуры.
        - нЗначение - тип: Имя переменной. В данный параметр возвращается найденное значение.
          Если ключа нет в структуре, то возвращается пустое значение неопределенного типа.

    **Возвращает:** Число.

        + 1 - свойство с ключом найдено
        + 0 - не найдено

    **Описание:** Позволяет получить значение свойства по указанному имени,
    а также проверить, имеется ли указанное свойство.

Удалить / Remove
-------------------------------------------------------------------------
.. _Удалить:

    **Синтаксис:** Удалить(стрКлюч)

    **Параметры:**

        - стрКлюч - тип: Строка. Название удаляемого свойства структуры.

    **Описание:** Удаляет элемент структуры с заданным ключом.
    Если ключа не существует,  выдается исключение.

Получить / Get
-------------------------------------------------------------------------
.. _Получить:

    **Синтаксис:** Получить(чИндекс, [стрИмяСвойства])

    **Параметры:**

        - чИндекс - тип: Число. Номер поля по порядку от 1 до Количество_
        - стрИмяСвойства - тип: Имя переменной. В нее записывается имя свойства,
          полученное по его номеру.

    **Возвращает:** Значение свойства, полученное по его номеру.

    **Описание:** Позволяет получать по индексу значение свойства и его имя.

ЕстьСвойство / ExistProp
-------------------------------------------------------------------------
.. _ЕстьСвойство:

    **Синтаксис:** ЕстьСвойство(стрИмя)

    **Параметры:**

        - стрИмя - тип:

    **Возвращает:** Число. Индекс найденного свойства, начиная с 1.
    Если свойство не найдено, 0.

    **Описание:** Проверяет, есть ли свойство с таким именем.

#########################################################################
DynaValue
#########################################################################
..  <chminfo>
        <klinks>
            DynaValue
        </klinks>
    </chminfo>

**Класс DynaValue**

Объект "DynaValue" представляет собой массив поименованных свойств или,
иными словами, составное значение. Свойства принимают тип значения переданного
параметром при добавлении свойства. Чтение/Установка свойства осуществляется
через точку по имени свойства.

Свойства
=======================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

<ИмяСвойства>
-----------------------------------
    **Доступ:** чтение и запись.

    **Тип:** Любой.

    **Описание:** Позволяет обратиться к свойству, добавленному
    методом ДобавитьСвойство_.


Методы
=======================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>


ДобавитьСвойство / AddProp
-------------------------------------------------------------------------
.. _ДобавитьСвойство:

    **Синтаксис:** ДобавитьСвойство(стрИмя, нЗначение)

    **Параметры:**

        - стрИмя - тип: Строка. Имя свойства.
        - нЗначение - тип: Любой. Значение свойства.

    **Возвращает:** добавленное значение.

    **Описание:** Добавляет новое свойство с заданным именем.

ВыбратьСвойства / SelectProps
-------------------------------------------------------------------------
.. _ВыбратьСвойства:

    **Синтаксис:** ВыбратьСвойства()

    **Возвращает:** Число.

        + 1 - если выбрано хоть одно свойство
        + 0 - нет свойств

    **Описание:** Открывает выборку свойств.

ПолучитьСвойство / GetProp
-------------------------------------------------------------------------
.. _ПолучитьСвойство:

    **Синтаксис:** ПолучитьСвойство(нЗначение, стрИмя)

    **Параметры:**

        - нЗначение - тип: Имя переменной. В нее вернется значение свойства.
        - стрИмя - тип:  Имя переменной. В нее вернется имя свойства.

    **Возвращает:** Число.

        + 1 - свойство получено
        + 0 - выборка кончилась

    **Описание:** Получает следующее свойство из выборки, открытой ВыбратьСвойства_.


ПолучитьСвойствоПоНомеру / GetPropByNum
-------------------------------------------------------------------------
.. _ПолучитьСвойствоПоНомеру:

    **Синтаксис:** ПолучитьСвойствоПоНомеру(чНомер)

    **Параметры:**

        - чНомер - тип: Число. Индекс свойства от **0** до КоличествоСвойств_ - 1.

    **Возвращает:** свойство по индексу.

    **Описание:** Получает значение свойства по его индексу.

    Если индекс неверен, то генерируется ошибка.

    **Внимание! Индексация свойств начинается с 0(ноль)!**


КоличествоСвойств / GetNProps
-------------------------------------------------------------------------
.. _КоличествоСвойств:

    **Синтаксис:** КоличествоСвойств()

    **Возвращает:** Число. Количество свойств.

    **Описание:** Получает количество свойств.

ВыгрузитьВСтроку / SaveToString
-------------------------------------------------------------------------
.. _ВыгрузитьВСтроку:

    **Синтаксис:** ВыгрузитьВСтроку()

    **Возвращает:** Строка. Сохранненое состояние объекта.

    **Описание:** Возвращает строку с содержимым объекта для хранения и последующего
    восстановления.

    **Примечание:**

        - выгружается абсолютно все содержимое, независимо от количества уровней вложенности.
        - Для возможного сохранения классов КОП, которые могут содержаться в DynaValue
          необходимо, чтобы эти классы соответствовали требованиям, описанным
          в `Сериализации КОП|_1cpp_oop_serialization_ <alink>`_.

ВыгрузитьВФайл / SaveToFile
-------------------------------------------------------------------------
.. _ВыгрузитьВФайл:

    **Синтаксис:** ВыгрузитьВФайл(стрИмяФайла)

    **Параметры:**

        - стрИмяФайла - тип: Строка. Имя файла, в который производится выгрузка состояния.

    **Возвращает:** Число.
        + 1 - выгрузка произведена успешно
        + иначе ошибка

    **Описание:** Сохраняет состояние объекта в файл.

ЗагрузитьИзСтроки / LoadFromString
-------------------------------------------------------------------------
.. _ЗагрузитьИзСтроки:

    **Синтаксис:** ЗагрузитьИзСтроки(стрСтрока)

    **Параметры:**

        - стрСтрока - тип: Строка. Сохраненное состояние объекта.

    **Описание:** Восстанавливает значение объекта из выгрузки в строку.

    **Примечание:**

    - Предыдущее состояние объекта не сохранятся.
    - восстанавливаются значения всех элементов, включая агрегатные.
    - категорически запрещается передавать методу "ЗагрузитьИзСтроки" в качестве
      параметра что-либо, кроме строк выгруженных методом ВыгрузитьВФайл_,
      по причине невозможности проконтролировать целостность данных.
      В случае неверной строки происходит немедленное прекращение работы
      программы 1С с потерей всех несохраненных на данный момент данных.
    - Запрещены циклические ссылки между элементами объектов, один из которых
      подлежит выгрузке в строку. В этом случае произойдет зацикливание программы 1С и,
      со временем - прекращение работы программы 1С с потерей всех несохраненных
      на данный момент данных.
    - Для восстановления состояния классов КОП вызывается их метод
      `ЗагрузитьИзСтроки|_1cpp_oop_load_from_string_ <alink>`_.

ЗагрузитьИзФайла / LoadFromFile
-------------------------------------------------------------------------
.. _ЗагрузитьИзФайла:

    **Синтаксис:** ЗагрузитьИзФайла(стрИмяФайла)

    **Параметры:**

        - стрИмяФайла - тип: Строка. Имя файла, из которого производится загрузка.

    **Возвращает:** Число.

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

    **Описание:** Восстанавливает значения объектов из файла.

    См. примечание у метода ЗагрузитьИзСтроки_.

НайтиПоИмени / FindByName
-------------------------------------------------------------------------
.. _НайтиПоИмени:

    **Синтаксис:** НайтиПоИмени(стрИмя)

    **Параметры:**

        - стрИмя - тип: Строка. Имя искомого свойства.
        -  - тип:
        -  - тип:
        -  - тип:

    **Возвращает:** номер свойства (от нуля), или -1 если не найдено.

    **Описание:** Ищет свойство по имени.

ПолучитьПоИмени / GetByName
-------------------------------------------------------------------------
.. _ПолучитьПоИмени:

    **Синтаксис:** ПолучитьПоИмени(стрИмя)

    **Параметры:**

        - стрИмя - тип: Строка. Имя свойства.

    **Возвращает:** Значение свойства по номеру (от нуля).

    **Описание:** Получает свойство по имени.

УстановитьПоИмени / SetByName
-------------------------------------------------------------------------
.. _УстановитьПоИмени:

    **Синтаксис:** УстановитьПоИмени(стрИмя,нЗначение)

    **Параметры:**

        - стрИмя - тип: Строка. Имя свойства.
        - нЗначение - тип: Любой. Значение свойства.

    **Описание:** Устанавливает значение свойства по имени свойства.

УстановитьПоНомеру / SetByNum
-------------------------------------------------------------------------
.. _УстановитьПоНомеру:

    **Синтаксис:** УстановитьПоНомеру(чНомер,нЗначение)

    **Параметры:**

        - чНомер - тип: Число. Порядковый номер свойства, нумерация начинается с 0 и заканчивается
          КоличествоСвойств_- 1;
        - нЗначение - тип: Любой. Новое значение свойства.

    **Описание:** Устанавливает значение свойства по номеру свойства.

УдалитьПоНомеру / DeleteByNum
-------------------------------------------------------------------------
.. _УдалитьПоНомеру:

    **Синтаксис:** УдалитьПоНомеру(чНомер)

    **Параметры:**

        - чНомер - тип: Число. Порядковый номер свойства, нумерация начинается с 0 и заканчивается
          КоличествоСвойств_ - 1;

    **Описание:** Удаляет свойство по указанному номеру.

УдалитьПоИмени / DeleteByName
-------------------------------------------------------------------------
.. _УдалитьПоИмени:

    **Синтаксис:** УдалитьПоИмени(стрИмя)

    **Параметры:**

        - стрИмя - тип: Строка. Имя удаляемого свойства.

    **Описание:** Удаляет свойство по указанному названию.

Очистить / Clear
-------------------------------------------------------------------------

    **Синтаксис:** Очистить()

    **Описание:** Удаляет все свойства.

СвойстваВСписокЗначений / PropsToValueList
-------------------------------------------------------------------------
.. _СвойстваВСписокЗначений:

    **Синтаксис:** СвойстваВСписокЗначений(сз)

    **Параметры:**

        - сз - тип: Имя переменной. В нее вернется заполненный список значений.

    **Описание:** Выгружает в список значений все значения и имена свойств.

НайтиПоЗначению / FindByValue
-------------------------------------------------------------------------
.. _НайтиПоЗначению:

    **Синтаксис:** НайтиПоЗначению(нЗнач, чИндекс)

    **Параметры:**

        - нЗнач - тип: Любой. Значение, которое ищем в объекте.
        - чИндекс - тип: Имя переменной. В нее вернется индекс найденного
          значения в объекте, если не найдено - устанавливается в -1.

    **Возвращает:** Если значение найдено - возвращается оно же, иначе пустой объект.

    **Описание:** ищет значение в объекте и, если находит, возвращает значение и
    индекс в "чИндекс".

НайтиПоЗначениюАтрибута / FindByAtributeValue
-------------------------------------------------------------------------
.. _НайтиПоЗначениюАтрибута:

    **Синтаксис:** НайтиПоЗначениюАтрибута(стрИмяАтрибута, нЗнач, чИндекс)

    **Параметры:**

        - стрИмяАтрибута - тип: Строка. Имя для поиска атрибута в объекте,
          который хранится в свойстве DynaValue.
        - нЗнач - тип: Любой. Значение, которое ищем в атрибуте значения свойства.
        - чИндекс - тип: Имя переменной. В нее вернется индекс найденного свойства,
          в котором хранится другой объект, имеющий атрибут с именем "стрИмяАтрибута",
          и содержащий значение, указанное в "нЗнач". Если не найдено устанавливается в -1.

    **Возвращает:** Если значение найдено - возвращается значение свойства,
    у которого был обнаружен атрибут, иначе возвращается пустой объект.

    **Описание:** Ищет свойство, у которого есть атрибут с указанным именем
    "стрИмяАтрибута", и содержащее указанное значение "нЗнач".


#########################################################################
Форма
#########################################################################
..  <chminfo>
        <klinks>
            Форма
            Form
        </klinks>
    </chminfo>

**Класс Форма / Form**

Класс позволяет привязываться к форме и создавать элементы управления.
В основном, используектся для создания ActiveX / АктивИкс объектов.

	**Версия:** Метод работает на релизе 2.5 и позже.

Методы
=======================
..  <chminfo split="0" splitchild="1">
        <insert nodes="//common/propsmethods/*"/>
    </chminfo>

.. _УстановитьФорму:

УстановитьФорму / AssignForm
-------------------------------------------------------------------------

    **Синтаксис:** void УстановитьФорму(Форма)

    **Параметры:**

        - **Форма** - тип: Форма. Форма, к которой идет привязка.

    **Описание:** Привязывает объект класса к переданной форме.

    Время жизни объекта совпадает со временем жизни указанной формы.

	Объект может генерировать событие "ФормаПриСоздании(ИсточникСобытия)" в виде вызова
    процедуры модуля формы с одним параметром, если данная процедура определена в модуле формы.
    Событие вызывается после физического создания формы.
    Параметр "ИсточникСобытия" у события - это источник события, т.е. объект "Форма" или
    наследник от класса "Форма".

Пока не выполнено ---
    Событие "ФормаПриСоздании" может также обрабатывать переданный первым параметром
    КОП-наследник от АктивИкс или ТабличногоПоля.
    Процедура-обработчик события должна быть объявлена в классе с ключевым словом Экспорт.

	Событие может быть задано в КОПе и в модуле формы одновременно,
	в этом случае сначала происходит вызов события в КОПе, затем в модуле формы.

--- Пока не выполнено ---

.. _СброситьФорму:

СброситьФорму / ResetForm
-------------------------------------------------------------------------

    **Синтаксис:** void СброситьФорму()

    **Описание:** Отменяет привязку объекта класса к переданной форме.

    Время жизни объекта совпадает со временем жизни указанной формы.

.. _СоздатьЭлементУправления:

СоздатьЭлементУправления / CreateControl
-------------------------------------------------------------------------

    **Синтаксис:** СоздатьЭлементУправления(ИмяОбъектаИлиОбъектКлассаКОП, ИдентификаторЭлементаДиалога)

    **Параметры:**

        - **ИмяОбъектаИлиОбъектКлассаКОП** - тип: Строка или объект класса.

        	Если передана строка, пытаемся создать объект класса с таким
        	именем.
        	Если передан объект, используем именно его.

        - **ИдентификаторЭлементаДиалога** - тип: Строка или элемент диалога. Идентификатор элемента
        	диалога, на месте которого будет создан элемент ActiveX.

    **Возвращает:** тип: Объект. Созданный объект.

    **Описание:** Создает элемент управления и указывает размещение создаваемого элемента.

    	Также устанавливает префикс для имен процедур-обработчиков событий, расположенных
    	в модуле формы.

    Время жизни объекта совпадает со временем жизни указанной формы.

    Предварительно должна быть установлена привязка объекта к форме
    методом УстановитьФорму_ .

.. important::
	Метод работает после физического открытия окна формы (например - в предопределенной процедуре
	ПослеОткрытия). Метод работает только для реквизитов диалога типа "Текст".

+

	На текущий момент возможно использование метода для классов, которые
	являются наследниками встроенных классов АктивИкс или ТабличноеПоле,
	или для самих объектов типа АктивИкс или ТабличноеПоле.


.. _СоздатьЭлементУправленияНаФорме:

СоздатьЭлементУправленияНаФорме / CreateControlOnForm
-------------------------------------------------------------------------

    **Синтаксис:** void СоздатьЭлементУправленияНаФорме(Форма, ИмяОбъектаИлиОбъектКлассаКОП, ИдентификаторЭлементаДиалога)

    **Описание:** Объединяет функционал УстановитьФорму_ и СоздатьЭлементУправления_
