]>

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

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

:: :: _1cpp_ext_classes_

Содержание

- Система
  - Методы
    - ЗакрытьФорму / CloseForm
- РаботаСРегистромWin
  - Методы
    - СоздатьКлюч / CreateKey
    - ОткрытьКлюч / OpenKey
    - ПодключитьРегистр / ConnectRegistry
    - УдалитьКлюч / DeleteKey
    - УдалитьЗначение / DeleteValue
    - УстановитьЗначение / SetValue
    - ЗапроситьЗначение / QueryValue
    - ВыбратьКлючи / ChooseKeys
    - ПолучитьКлюч / GetKey
    - ВыбратьЗначения / ChooseValues
    - ПолучитьЗначение / GetValue
    - ОтладочныеСообщения
    - ЗаписатьВсеАтрибуты
- ВыполняемыйМодуль
  - Свойства
    - <ИмяПеременной>
  - Методы
    - <ИмяМетода>
    - УстановитьМодуль / AssignSource
    - НазначитьКонтекст / AssignContext
    - ПрисоединитьТекущийМодуль / AssignFriendModule
    - КомпилироватьМодуль / Compile
    - ВыполнитьМодуль / Execute
    - GetMethOfContext
    - СформироватьОшибку / RaiseError
    - ОчиститьПозициюПроведения / ErasePostState
    - ВосстановитьПозициюПроведения / RestorePostState
    - ВыброситьИскл / Throw
    - ПолучитьИсключение / GetExeption
    - КомпилироватьИВыполнитьМодуль / CompileAndExecute
    - РазрешитьИсключения / EnableExceptions
- Делегат
  - Методы
    - ОпределитьТип / DefineType
    - Добавить / AddMethod
    - Удалить / RemMethod
    - УдалитьПоКлючу / RemMethodByKey
    - Вызвать / Invoke
    - ВызватьПоКлючу / InvokeByKey
    - Очистить / Erase
    - Пустой / IsEmpty
- МенеджерСобытий
  - Методы
    - Пустой / IsEmpty
    - ДобавитьОбработчикСобытия / AddEventHandle
    - УдалитьОбработчикСобытия / RemEventHandle
    - ПослатьСобытие / SendEvent
    - УстановитьДелегата / SetDelegate
    - Очистить / Clear
    - УстановитьКоличествоПараметров / SetCountOfParams
  - Пример кода
- Структура
  - Свойства
    - <ИмяСвойства>
  - Методы
    - Вставить / Insert
    - Количество / Count
    - Очистить / Clear
    - Свойство / Property
    - Удалить / Remove
    - Получить / Get
    - ЕстьСвойство / ExistProp
- DynaValue
  - Свойства
    - <ИмяСвойства>
  - Методы
    - ДобавитьСвойство / AddProp
    - ВыбратьСвойства / SelectProps
    - ПолучитьСвойство / GetProp
    - ПолучитьСвойствоПоНомеру / GetPropByNum
    - КоличествоСвойств / GetNProps
    - ВыгрузитьВСтроку / SaveToString
    - ВыгрузитьВФайл / SaveToFile
    - ЗагрузитьИзСтроки / LoadFromString
    - ЗагрузитьИзФайла / LoadFromFile
    - НайтиПоИмени / FindByName
    - ПолучитьПоИмени / GetByName
    - УстановитьПоИмени / SetByName
    - УстановитьПоНомеру / SetByNum
    - УдалитьПоНомеру / DeleteByNum
    - УдалитьПоИмени / DeleteByName
    - Очистить / Clear
    - СвойстваВСписокЗначений / PropsToValueList
    - НайтиПоЗначению / FindByValue
    - НайтиПоЗначениюАтрибута / FindByAtributeValue

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

- ИндексированнаяТаблица
- ТабличноеПоле
- BinaryData
- Math

# Система

Система System

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

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

## Методы

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

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

> Параметры:

> > - КонтФормы - тип: ГрупповойКонтекст.

> > - ФлагСохранения - тип: Число. Необязательный параметр.

> >     0 - закрыть форму без вопросов; 1 - если документ, счет, элемент справочника изменен, то будет запрос о сохранении изменений. Значение по умолчанию - 0.

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

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

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

> > В отличие от метода КонтФормы.Форма.Закрыть([ФлагСохранения]), который

> >   > закрывает форму не сразу, а только после завершения работыпользовательского кода,

> >   System Message: WARNING/2 (`.\extobjs.txt`, line 266)

> >   Block quote ends without a blank line; unexpected unindent.

> >   данный метод не ждет завершения кода, а закрывает форму немедленно. Т.е. управление к следующей строке после вызова Система.ЗакрытьФорму будет передано только после закрытия формы.

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

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

# РаботаСРегистромWin

РаботаСРегистромWin WorkAsRegisterWin

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

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

Позволяет:

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

## Методы

### СоздатьКлюч / 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 - Включить

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

### ЗаписатьВсеАтрибуты

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

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

# ВыполняемыйМодуль

ВыполняемыйМодуль ExecuteModule

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

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

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

## Свойства

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

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

> Тип: Любой.

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

## Методы

### <ИмяМетода>

> Синтаксис: Соответствует синтаксису метода модуля.

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

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

### УстановитьМодуль / 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_.

### КомпилироватьИВыполнитьМодуль / CompileAndExecute

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

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

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

### РазрешитьИсключения / EnableExceptions

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

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

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

# Делегат

Делегат Delegate

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

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

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

## Методы

### ОпределитьТип / DefineType

> Синтаксис: | ОпределитьТип(чКолПарам, флЕстьВозврат, [флПрерыватьВыполнение = 0])
> Параметры: | чКолПарам: Число Количество параметров, которые будут передаваться в методы делегата флЕстьВозврат: Число Флаг наличия возвращаемого значения 1 - методы в делегате есть функции 0 - методы в делегате есть процедуры флПрерыватьВыполнение: Число Флаг прерывания выполнения по условию 1 - методы Вызвать и ВызватьПоКлючу прерывают выполнение цепочки, если при вызове очередной функции возвращенное значение равно 0 0 - методы Вызвать и ВызватьПоКлючу всегда проходят цепочку вызова полностью
> Возвращает: | нет
> Описание: | Задает сигнатуру хранимых в Делегате методов. Сигнатура - количество параметров и тип (функция / процедура) методов

### Добавить / AddMethod

> Синтаксис: | Добавить(ЭкземплярАгрегатногоОбъекта, стрИмяМетода, [стрКлюч = ""])
> Параметры: | ЭкземплярАгрегатногоОбъекта: ГрупповойКонтекст, АгрегатныйОбъект Объект, метод которого будет сохранен для вызова стрИмяМетода: Строка Имя метода, который будет вызван стрКлюч: Строка Если указан - можно вызывать метод по указанному ключу с помощью метода делегата ВызватьПоКлючу По умолчанию используется ключ "" Возможна реализация обработчика по умолчанию для ситуаций вызова по несуществующим ключам (см. описание метода ВызватьПоКлючу)
> Возвращает: | Число 1 - добавление метода прошло успешно
> Описание: | Устанавливает/добавляет в делегат ссылки на метод агрегатного объекта для его дальнейшего вызова Сигнатура метода объекта для установки должна соответствовать указанной в ОпределитьТип
> Примечание: | Возможно использование одинаковых методов для любых сочетаний ключей и агрегатных объектов Количество ключей не регламентируется Количество методов в пределах ключа не регламентируется Ключи и имена методов являются регистронезависимыми

### Удалить / RemMethod

> Синтаксис: | Удалить(ЭкземплярАгрегатногоОбъекта, стрИмяМетода)
> Параметры: | ЭкземплярАгрегатногоОбъекта: ГрупповойКонтекст, АгрегатныйОбъект Объект, ссылка на метод которого была сохранена ранее стрИмяМетода: Строка Имя метода, ссылка на который была сохранена ранее
> Возвращает: | Число 1 - удаление прошло успешно 0 - ссылок не найдено
> Описание: | Удаляет все ссылки на заданный метод указанного агрегатного объекта во всех ключах

### УдалитьПоКлючу / RemMethodByKey

> Синтаксис: | УдалитьПоКлючу(стрКлюч)
> Параметры: | стрКлюч: Строка Ключ, по которому происходит поиск методов объектов
> Возвращает: | Число 1 - удаление прошло успешно 0 - для указанного ключа ссылок не найдено
> Описание: | Удаляет все ссылки на методы агрегатных объектов по заданному ключу Ключ задается при добавлении ссылки на метод, третьим параметром в Добавить

### Вызвать / Invoke

> Синтаксис: | Вызвать(...)
> Параметры: | ...: Количество параметров или их отсутствие определяется сигнатурой делегата, заданной ранее методом ОпределитьТип
> Возвращает: | Наличие и тип возвращаемого значения определяется сигнатурой делегата
> Описание: | Вызывает все методы всех ключей, находящихся в делегате, с учетом параметра чПрерыватьВыполнение, заданного ранее методом ОпределитьТип
> Примечание: | Порядок вызова в пределах ключа регламентируется порядком добавления метода в делегат методом Добавить. Порядок перебора ключей не определен.

### ВызватьПоКлючу / InvokeByKey

> Синтаксис: | ВызватьПоКлючу(стрКлюч, ...)
> Параметры: | стрКлюч: Строка Ключ, по которому происходит поиск ссылки ...: Количество параметров или их отсутствие определяется сигнатурой делегата, заданной ранее методом ОпределитьТип
> Возвращает: | Наличие и тип возвращаемого значения определяется сигнатурой делегата
> Описание: | Вызывает все методы указанного ключа, находящиеся в делегате, с учетом параметра чПрерыватьВыполнение, заданного ранее методом ОпределитьТип
> Примечание: | Порядок вызова в пределах ключа регламентируется порядком добавления метода в делегат методом Добавить
> Обработчик по умолчанию:
> | Если указанный ключ в делегате не задан, вызывается обработчик по умолчанию по ключу "__default" (должен быть предварительно определен методом Добавить) Если обработчик по умолчанию также не задан, не вызывается ничего Обработчик по умолчанию учитывает значение параметра чПрерыватьВыполнение в общем порядке

### Очистить / Erase

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

### Пустой / IsEmpty

> Синтаксис: | Пустой()
> Возвращает: | Число 1, если делегат не содержит ссылок на методы 0, если содержит
> Описание: | Проверяет наличие сохраненных ссылок

# МенеджерСобытий

МенеджерСобытий EventManager

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

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

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

## Методы

### Пустой / IsEmpty

> Синтаксис: Пустой()

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

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

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

### ДобавитьОбработчикСобытия / AddEventHandle

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

> Параметры:

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

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

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

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

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

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

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

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

### УдалитьОбработчикСобытия / RemEventHandle

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

> Параметры:

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

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

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

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

### ПослатьСобытие / SendEvent

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

> Параметры:

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

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

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

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

### УстановитьДелегата / SetDelegate

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

> Параметры:

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

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

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

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

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

> Параметры:

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

### УстановитьКоличествоПараметров / SetCountOfParams

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

> Параметры:

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

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

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

## Пример кода

::

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

    класс ФабрикаСобытий=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();
    // Далее происходит вызов всех методов зарегистрированных в менеджере экземпляров классов - подписчиков.

# Структура

Структура Struct

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

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

## Свойства

### <ИмяСвойства>

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

> Тип: Любой.

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

## Методы

### Вставить / Insert

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

> Параметры:

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

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

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

> > - чРежим - тип: Число.

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

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

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

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

### Количество / Count

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

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

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

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

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

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

### Свойство / Property

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

> Параметры:

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

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

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

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

### Удалить / Remove

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

> Параметры:

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

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

### Получить / Get

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

> Параметры:

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

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

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

### ЕстьСвойство / ExistProp

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

> Параметры:

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

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

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

# DynaValue

DynaValue

Класс DynaValue

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

## Свойства

### <ИмяСвойства>

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

> Тип: Любой.

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

## Методы

### ДобавитьСвойство / AddProp

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

> Параметры:

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

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

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

### ВыбратьСвойства / SelectProps

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

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

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

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

### ПолучитьСвойство / GetProp

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

> Параметры:

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

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

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

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

### ПолучитьСвойствоПоНомеру / GetPropByNum

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

> Параметры:

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

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

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

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

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

### КоличествоСвойств / GetNProps

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

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

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

### ВыгрузитьВСтроку / SaveToString

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

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

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

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

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

### ВыгрузитьВФайл / SaveToFile

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

> Параметры:

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

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

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

### ЗагрузитьИзСтроки / LoadFromString

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

> Параметры:

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

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

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

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

### ЗагрузитьИзФайла / LoadFromFile

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

> Параметры:

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

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

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

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

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

### НайтиПоИмени / FindByName

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

> Параметры:

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

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

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

### ПолучитьПоИмени / GetByName

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

> Параметры:

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

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

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

### УстановитьПоИмени / SetByName

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

> Параметры:

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

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

### УстановитьПоНомеру / SetByNum

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

> Параметры:

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

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

### УдалитьПоНомеру / DeleteByNum

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

> Параметры:

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

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

### УдалитьПоИмени / DeleteByName

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

> Параметры:

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

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

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

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

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

### СвойстваВСписокЗначений / PropsToValueList

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

> Параметры:

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

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

### НайтиПоЗначению / FindByValue

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

> Параметры:

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

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

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

### НайтиПоЗначениюАтрибута / FindByAtributeValue

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

> Параметры:

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

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

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