---
title: "CreateSpcIterator - Создать итератор для перебора объектов спецификации"
type: guide
api: [api7]
tags: [guide, api7, createspciterator]
sources:
  - createspciterator.html
---

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


## CreateSpcIterator - Создать итератор для перебора объектов спецификации

Пример...
Аналог данной функции при использовании Automation - метод ksIterator::ksCreateSpcIterator.
Синтаксис:
```
reference CreateSpcIterator (char * nameLib,
unsigned int styleNumb,
int spcObjType);
Входные параметры:
nameLib    - имя библиотеки стилей спецификации,
styleNumb    - номер стиля спецификации в библиотеке,
spcObjType    - тип объектов: 0 - базовые, 1 - вспомогательные, 2 - базовые и вспомогательные из сортированного массива, 3 - все объекты.
Возвращаемое значение:
1    - в случае успешного завершения,
0    - в случае неудачи.
```
Примечание:
1. Если функция вызывается в графическом документе, то итератор создается для объектов, образованных по описанию, определяемому именем библиотеки стилей спецификации и номером стиля.
2. В документе-спецификации параметры nameLib и styleNumb не используются (т.к. все объекты в ней создаются по единственному описанию, однозначно определяемому текущим стилем).
3. При использовании Unicode следует использовать функцию CreateSpcIteratorW.


## CreateSpcIterator, ksGetSpcObjectColumnText, ksSetSpcObjectColumnText - пример использования

reference spcObj = 0;
double numbObj; //уникальный номер объекта
//создадим объект спецификации
if( ::ksSpcObjectCreate("graphic.lyt", //имя библиотеки типов
1, // номер типа спецификации
20, 0, //номер раздела и подраздела
0, //тип атрибута
0)) { //базовый объект
spcObj = ::ksSpcObjectEnd();
//запомним номер объекта
numbObj = ::ksGetSpcObjectNumber ( spcObj);
}
//создадим итератор для навигации по объектам спецификации
reference iter = ::CreateSpcIterator("graphic.lyt", 1, 0);
if (!iter)
::MessageBoxResult(); // неудачное завершение - выдадим результат работы нашей функции
else {
reference spcObj;
char buf[120];
// найдем первый объект
spcObj = ::MoveIterator(iter, 'F');
if (spcObj && ::ExistObj(spcObj)) {
//у всех объектов в обозначении добавим "-01"
//а у объекта с номером numbObj - "-02"
do {
//возьмем текст обозначения
::ksGetSpcObjectColumnText (spcObj
SPC_CLM_MARK, //тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
1, //номер колонки данного типа начиная с 1
buf, 120); //указатель
double n = ::ksGetSpcObjectNumber (spcObj);
//добавим к обозначению нужную добавку
strcat(buf, n == numbObj ? "-02" : "-01");
//откроем объект на редактирование
::ksSpcObjectEdit(spcObj);
//в этом блоке можно редактировать все колонки спецификации,
//подключать или отключать ассоциированную геометрию
//в нашем случае заменим обозначение
::kSetSpcObjectColumnText (SPC_CLM_MARK, //тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
1, //номер колонки данного типа начиная с 1
buf); //указатель
//закроем объет после редактирования
::ksSpcObjectEnd();
//найдем следующий объект
spcObj = ::MoveIterator(iter, 'N');
} while(spcObj && ::ExistObj(spcObj));
}
//удалим итератор
::DeleteIterator(iter);
}
}
