---
title: "ksSetAttrType - Изменить тип атрибута в библиотеке типов атрибутов"
type: guide
api: [api7]
tags: [guide, api7, kssetattrtype]
sources:
  - kssetattrtype.html
---

*API экспортных функций > Функции работы с прикладной библиотекой  > Функции работы с атрибутами *


## ksSetAttrType - Изменить тип атрибута в библиотеке типов атрибутов

Пример...
Аналог данной функции при использовании Automation - метод ksAttributeObject::ksSetAttrType.
Синтаксис:
```
double ksSetAttrType (double attrID,
char * libname,
ksAttributeType * attrType,
char * password);
Входные параметры:
attrID    - уникальный номер типа атрибута,
libName    - имя библиотеки типов атрибутов, если libname = NULL, то тип атрибута изменяется в текущем документе,
attrType    - Указатель на структуру параметров типа атрибута,
password    - пароль типа атрибута.
Возвращаемое значение:
уникальный номер типа атрибута    - в случае удачного завершения,
0    - в случае неудачи.
```
Примечание:
Уникальный номер типа атрибута attrID может быть получен с помощью поля typeid структуры параметров типа атрибута LibraryAttrTypeParam, которая может быть получена с помощью функции ksGetLibraryAttrTypesArray, или с помощью функции GetAttrKeysInfo. Тип атрибута должен быть предварительно создан, например, с помощью функции ksCreateAttrType.


## ksSetAttrType - Пример использования

double numb;
int j;
char nameFile[128];
char password[11];
ksAttributeType attrType;
attrType.columns = CreateArray (ATTR_COLUMN_ARR, 0);
//поменяем местами первую колонку и последнюю
ColumnInfo par1; //структура для первой колонки
par1.columns = CreateArray (ATTR_COLUMN_ARR,0);
par1.fieldEnum = CreateArray (CHAR_STR_ARR,0);
ColumnInfo parN; //структура для последней колонки
parN.columns = CreateArray (ATTR_COLUMN_ARR,0);
parN.fieldEnum = CreateArray (CHAR_STR_ARR,0);
//запросить имя библиотеки
if (!ChoiceFile("*.lat",NULL, nameFile,128))
nameFile[0]='\0'; //будем искать в документе
do
{
j = ReadDouble ("Ввести номер типа атрибута", 1000, 0, 1e12,&numb);
if (j)
{
j = ReadString ("Ввести пароль типа атрибута", password, 10);
if (j)
{
//считаем тип атрибута
if (!ksGetAttrType(numb, nameFile, &attrType))
MessageBoxResult(); // проверяем результат работы
//нашей функции
else
{
strcpy (attrType.password,password);
// число колонок
int n = GetArrayCount (attrType.columns);
//считаем первую колонку
GetArrayItem (attrType.columns, 0, &par1, sizeof (par1));
//считаем последнюю колонку
GetArrayItem(attrType.columns, n-1, &parN, sizeof (parN));
//заменим первую колонку
SetArrayItem (attrType.columns, 0, &parN, sizeof (parN));
//заменим последнюю колонку
SetArrayItem (attrType.columns, n-1, &par1, sizeof (par1));
//заменим тип атрибута на новый
double numbType = ksSetAttrType (numb, nameFile,
&attrType, password);
if (numbType > 1)
{
char buf[128];
sprintf (buf, "numbType=%f ",numbType);
Message (buf);
}
else
MessageBoxResult(); // неудачное завершение -
// выдадим результат работы нашей функции
}
}
}
}
while(j);
//удалим все созданные массивы
DeleteArray (par1.columns);
DeleteArray (par1.fieldEnum);
DeleteArray(parN.columns);
DeleteArray(parN.fieldEnum);
DeleteArray(attrType.columns);
