---
title: "Интерфейс IUserDataStorage"
type: interface
api: [api7]
tags: [interface, api7, iuserdatastorage]
sources:
  - iuserdatastorage.html
---

*API интерфейсов. Версия 7 > Документ  > Хранилища *


## Интерфейс IUserDataStorage

Интерфейс пользовательского хранилища.
Иерархия:
IKompasAPIObject
IUserDataStorage
Описание:
Хранилище представляет собой именованную «закладку» в коллекции. Для хранилища могут задаваться версии. Хранилище может быть защищено от изменений паролем. Парольная защита не препятствует просмотру содержания хранилища. Данные в хранилище представлены в виде таблицы, состоящей из двух столбцов – данных различных типов и комментария.
Примечание:
Интерфейс можно получить у коллекции хранилищ, используя свойство IUserDataStorages::Item.
Интерфейс IUserDataStorages
Интерфейс IUserDataStoragesMng


## AddObject - Добавить объект и комментарий в пользовательское хранилище

Синтаксис Automation:
```
long AddObject( LPCTSTR pass,
const VARIANT & object,
LPCTSTR comment );
```
Синтаксис COM:
```
HRESULT AddObject( [in] BSTR Pass,
[in] VARIANT Object,
[in] BSTR Comment,
[out, retval] long* pVal);
Входные параметры:
Pass    - пароль,
Object    - указатель на объект,
comment    - комментарий.
Возвращаемое значение:
- индекс объекта,
```
Примечание:
1. Объект может быть variant'ом с типом VT_INT, VT_I2, VT_I4, VT_R4, VT_R8, VT_DATE, VT_UI1, VT_UINT, VT_BOOL, VT_BSTR, VT_DISPATCH, а также VT_ARRAY с этими типами данных. Индекс массива начинается с нуля.
2. Если задан интерфейс VT_DISPATCH и массив объектов VT_ARRAY | VT_DISPATCH, то под объектом подразумевается указатель на IDispatch от объектов API. Они также будут сохранены вместе с документом и при следующем запросе найдены.
3. Индексация массивов должна начинаться с нуля.
4. Если хранилище защищено паролем от изменений, то метод будет выполнен только после указания правильного пароля.
5. Под объектом API следует понимать объекты:
для 3D хранилища - наследник от IModelObject,
для 2D хранилища - наследник от IDrawingObject (кроме ILayer).


## AddObjects - Добавить объекты пользовательского хранилища и комментарии к ним

Синтаксис Automation:
```
BOOL AddObjects( BSTR Pass, VARIANT Objects, VARIANT Comments );
```
Синтаксис COM:
```
HRESULT AddObjects( BSTR Pass, VARIANT Objects, VARIANT Comments, BOOL * Result );
Возвращаемое значение:
TRUE    - в случае успеха,
FALSE    - в случае неудачи.
Входные параметры:
Pass    - пароль,
Objects    - список данных в виде массива VT_ARRAY    VT_VARIANT,
comments    - список комментариев в виде массива VT_ARRAY    VT_BSTR.
Версия Компас v21
```


## Clear - Очистить хранилище, удалив все объекты

Синтаксис Automation:
```
BOOL Clear ( LPCTSTR Pass );
```
Синтаксис COM:
```
HRESULT Clear( [in] BSTR Pass,
[out, retval] VARIANT_BOOL* Result);
Входные параметры:
Pass    - пароль.
Возвращаемое значение:
TRUE    - в случае успеха,
FALSE    - в случае неудачи.
```
Примечание:
Если хранилище защищено паролем от изменений, то метод будет выполнен только после указания правильного пароля.


## Delete - Удалить объект, заданный по индексу или по комментарию

Синтаксис Automation:
```
BOOL Delete( LPCTSTR pass,
const VARIANT & index );
```
Синтаксис COM:
```
HRESULT Delete( [in] BSTR Pass,
[in] VARIANT Index,
[out, retval] VARIANT_BOOL* PVal );
Входные параметры:
Pass    - пароль,
Index    - индекс объекта или комментарий.
Возвращаемое значение:
TRUE    - в случае успеха,
FALSE    - в случае неудачи.
```
Примечание:
1. В качестве индекса можно задать число или комментарий к объекту.
2. Если хранилище защищено паролем от изменений, то метод будет выполнен только после указания правильного пароля.


## GetObject - Получить объект пользовательского хранилища и комментарий к нему по комментарию или индексу

Синтаксис Automation:
```
BSTR GetObject( const VARIANT & index, VARIANT * object, long * numb );
```
Синтаксис COM:
```
HRESULT GetObject( [in] VARIANT Index,
[out] VARIANT * Object,
[out] long* numb,
[out, retval] BSTR * Comment );
Входные параметры:
Index    - индекс объекта или комментарий.
Выходные параметры:
Object    - указатель на объект хранилища,
numb    - указатель на номер объекта.
Возвращаемое значение:
Comment (BSTR)    - комментарий.
```
Примечание:
1. В качестве индекса можно задать число или комментарий к объекту.
2. Объект может быть variant'ом с типом VT_INT, VT_I2, VT_I4, VT_R4, VT_R8, VT_DATE, VT_UI1, VT_UINT, VT_BOOL, VT_BSTR, VT_DISPATCH, а также VT_ARRAY с этими типами данных.
3. Если задан интерфейс VT_DISPATCH и массив объектов VT_ARRAY | VT_DISPATCH, то под объектом подразумевается указатель на IDispatch от объектов API. Они также будут сохранены вместе с документом и при следующем запросе найдены.


## Name - Имя хранилища

Синтаксис Automation:
```
Тип данных: LPSTR
Name = StorageObj.Name(Pass)    Получить свойство (* )
StorageObj.Name(Pass) = Name    Установить свойство (* )
Name = StorageObj.GetName(Pass)    Получить свойство (**)
StorageObj.SetName (Name, Pass)    Установить свойство (**)
Входные параметры:
Pass (LPSTR)    - пароль хранилища.
```
Синтаксис COM:
```
Тип данных:BSTR.
StorageObj>get_Name (Pass, &Name)    Получить свойство
StorageObj>put_Name (Pass, Name)    Установить свойство
Входные параметры:
Pass (BSTR)    - пароль хранилища.
```
Примечание:
Если хранилище защищено паролем, то изменить свойство можно, только указав правильный пароль.


## SetObject - Установить объект пользовательского хранилища и комментарий к нему по комментарию или индексу

Синтаксис Automation:
```
long SetObject( LPCTSTR pass,
const VARIANT index,
const VARIANT & object,
LPCTSTR comment );
```
Синтаксис COM:
```
HRESULT SetObject( [in] BSTR Pass,
[in] VARIANT Index,
[in] VARIANT Object,
[in] BSTR Comment,
[out, retval] long* pVal);
Входные параметры:
Pass    - пароль,
Index    - индекс объекта или комментарий,
Object    - указатель на объект,
comment    - комментарий.
Возвращаемое значение:
TRUE    - в случае успеха,
FALSE    - в случае неудачи.
```
Примечание:
1. В качестве индекса можно задать число или комментарий к объекту.
2. Объект может быть variant'ом с типом VT_INT, VT_I2, VT_I4, VT_R4, VT_R8, VT_DATE, VT_UI1, VT_UINT, VT_BOOL, VT_BSTR, VT_DISPATCH, а также VT_ARRAY с этими типами данных.
3. Если задан интерфейс VT_DISPATCH и массив объектов VT_ARRAY | VT_DISPATCH, то под объектом подразумевается указатель на IDispatch от объектов API. Они также будут сохранены вместе с документом и при следующем запросе найдены.
4. Если хранилище защищено паролем от изменений, то метод будет выполнен только после указания правильного пароля.


## SetPassword - Установить пароль на изменение данных в хранилище

Синтаксис Automation:
```
BOOL SetPassword( LPCTSTR oldPass, LPCTSTR newPass );
```
Синтаксис COM:
```
HRESULT SetPassword( [in] BSTR OldPass,
[in] BSTR NewPass,
[out, retval] VARIANT_BOOL* Result);
Входные параметры:
OldPass    - старый пароль,
NewPass    - новый пароль.
```
Примечание:
1. Если хранилище защищено паролем от изменений, то изменить пароль можно, только указав текущий пароль.
2. По умолчанию пароль представляет собой пустую строку или нулевой указатель.


## Version - Версия хранилища

Синтаксис Automation:
```
Тип данных: long
Version = StorageObj.Version(Pass)    Получить свойство (* )
StorageObj.Version(Pass) = Version    Установить свойство (* )
Version = StorageObj.GetVersion(Pass)    Получить свойство (**)
StorageObj.SetVersion (Version, Pass)    Установить свойство (**)
Входные параметры:
Pass (LPSTR)    - пароль хранилища.
```
Синтаксис COM:
```
Тип данных: long
StorageObj->get_Version (Pass, &Version)    Получить свойство
StorageObj->put_Version (Pass, Version)    Установить свойство
Входные параметры:
Pass (BSTR)    - пароль хранилища.
```
Примечание:
Если хранилище защищено паролем, то изменить свойство можно, только указав пароль.
