Пример использования функций API конфигуратора Назад В начало Вперед
//=========================================================

#include cfg_all.inc   // константы для использования конфигуратора
#include cfg_err.inc
end;


//=========================================================

table struct cfsObjects
(
  NRec	: comp,
  Npp	 : longInt,
  Name	: string,
  objType : string
)
with index
(
  cfsObjects0  = NRec(unique, surrogate)
);

//---------------------------------------------------------

table struct cfsProps
(
  NRec   : comp,
  object : comp,
  Npp	: longInt,
  Name   : string,
  Value  : string
)
with index
(
  cfsProps0  = NRec(unique, surrogate),
  cfsProps1  = object
);

//=========================================================

interface ApiConfTest 'Тест API конфигуратора' escclose;
  show at(1,1,79,30);

//---------------------------------------------------------

create view

as select
 *

from
 cfsObjects, cfsProps

where
((
  cfsObjects.NRec == cfsProps.object
))
;

//---------------------------------------------------------

procedure ShowResult(retcod: longInt; msg: string);
/*
 * Процедура переводит код retcod в идентификатор соответствующей
 * константы, добавляет ее к строке msg и выводит полученное сообщение.
 */
{
  var errmsg: string;

  case retcod of

	cfErrContainerObjectNotExist:
	errmsg := 'cfErrContainerObjectNotExist';

	cfErrObjectNotExist:
	errmsg := 'cfErrObjectNotExist';

	cfErrPropNotExist:
	errmsg := 'cfErrPropNotExist';

	cfErrPropValueError:
	errmsg := 'cfErrPropValueError';

	cfErrBadFieldType:
	errmsg := 'CfErrBadFieldType';

	cfOk:
	errmsg := 'cfOk';

  else
	errmsg := 'ошибка сервисной функции свойства= ' + retcod;

  end;

  Message(msg + ': ' + errmsg);
}

//---------------------------------------------------------

function Fill_cfsProps(objName : string) : boolean; forward;

//---------------------------------------------------------

function Fill_cfsObjects: boolean;
/*
 * Функция заполняет таблицу cfsObjects объектами интерфейса ApiConfTest.
 * Для каждого объекта вызывается функция Fill_cfsProps.
 * Возвращает true, если ошибок не было, и false в противном случае.
 */
{
  var aList: array [1..1] of string;
  var i, n, rc, self: longInt;
  var fullName, cont, objType: string;

  SetLimit(aList, 0);  // очистить массив
  rc := cfsEnumObjects('ApiConfTest', aList, true);
  if (rc <> cfOK)
  {
	ShowResult(rc, 'Ошибка получения списка объектов для контейнера "ApiConfTest"');
	Fill_cfsObjects := false;
	exit;
  }

  n := Count(aList);
  for (i := 1; i <= n; i := i + 1)
  {
	ClearBuffer(#cfsObjects);
	cfsObjects.Npp  := i;
	cfsObjects.Name := aList[i];

	rc := cfsGetObjInfo(aList[i], fullName, self, cont, objType);
	if (rc = cfOK)
	cfsObjects.objType := objType;
	else
	cfsObjects.objType := 'Error';

	if (insert current cfsObjects <> tsOk)
	{
	message('Ошибка добавления записи в таблицу cfsObjects');
	Fill_cfsObjects := false;
	break;
}

	// заполнить таблицу cfsProps свойствами текущего объекта.
	Fill_cfsObjects := Fill_cfsObjects AND Fill_cfsProps(aList[i]);
  }
}

//---------------------------------------------------------

function Fill_cfsProps(objName : string) : boolean;
/*
 * Функция заполняет таблицу cfsProps свойствами объекта objName.
 * Возвращает true, если ошибок не было, и false в противном случае.
 */
{
  var aList: array [1..1] of string;
  var fullName: string;
  var i, n, rc, propType, flags: longInt;
  var sValue: string;
  var wValue: word;

  SetLimit(aList, 0); // очистить массив
  rc := cfsEnumProps(objName, aList);
  if (rc <> cfOK)
  {
	ShowResult(rc, 'Ошибка получения списка свойств для объекта ' + aList[i]);
  }
  else
  {
	i := 1;
	n := Count(aList);
	Fill_cfsProps := true;
	while (i <= n)
	{
	ClearBuffer(#cfsProps);
	cfsProps.Npp  := i;
	cfsProps.Name := aList[i];

	case cfsProps.Name of

		'Title':
		{
		rc := cfsGetProp(objName, aList[i], sValue);
		cfsProps.Value := sValue;
	}

		'TextAlign':
		{
		rc := cfsGetProp(objName, aList[i], wValue);
		cfsProps.Value := wValue;
	}

	else
		cfsProps.Value := 'unknown';
	end;

	if (insert current cfsProps <> tsOk)
	{
		message('Ошибка добавления записи в таблицу Props');
		Fill_cfsProps := false;
		break;
}

	i := i + 1;
}
  }
}

//---------------------------------------------------------

browse brObjects;
  show at(,1,,7);
  table cfsObjects;

fields
  cfsObjects.Npp	 #3'N п/п'  ('Порядковый номер объекта',,) :  [5], protect;
  cfsObjects.Name	#3'Объект' ('Имя объекта',,)			: [20], protect;
  cfsObjects.objType #3'Тип объекта' ('Тип объекта',,)		 : [20], protect;
end;

//---------------------------------------------------------

browse brProps;
  show at(,8);
  table cfsProps;

fields
  cfsProps.Npp	#3'N п/п'  ('Порядковый номер объекта',,)	 :  [5], protect;
  cfsProps.Name	 #3'Свойство' ('Свойство',,)				 : [20], protect;
  cfsProps.Value	#3'Значение свойства' ('Значение свойства',,) : [10], noProtect;
end;

//---------------------------------------------------------

handleEvent

cmInit:
  Fill_cfsObjects;

cmUpdateRecord:
{
  var sValue: string;
  var wValue: word;
  var rc	: longInt;

  case cfsProps.Name of

	'Title':
	{
	sValue := cfsProps.Value;
	rc := cfsSetProp(cfsObjects.Name, cfpTitle, sValue);
	if (update current cfsProps <> tsOK) {};
}

	'TextAlign':
	{
	wValue := cfsProps.Value;
	rc := cfsSetProp(cfsObjects.Name, cfpTextAlign, wValue);
	if (update current cfsProps <> tsOK) {};
}

  end;
}

end // handleEvent

end.