В этой ветке я постараюсь рассказать о том, как работать с метаданными, и отвечать на вопросы.
Для начала пример, как перебрать существующие метаданные.
Код:
text = []
printMdObj(metadata.current.rootObject, "", text)
var d = v8New("ТекстовыйДокумент")
d.УстановитьТекст(text.join('\n'))
d.Показать()
function printMdObj(mdObj, indent, text)
{
// Получим и покажем класс объекта
var mdc = mdObj.mdclass
text.push(indent + "mdclass " + mdc.name(1))
// Переберем свойства объекта. Количество доступных свойств объекта
// определяется в его классе. Сами свойства объекта получаются методом
// property(индекс), где индекс может быть - порядковым номером свойства (с нуля)
// или названием свойства, или строкой с гуидом свойства
for(var i = 0, c = mdc.propertiesCount; i < c; i++)
{
var mdProp = mdc.propertyAt(i)
var propVal = toV8Value(mdObj.property(i))
text.push(indent + " prop " + mdProp.name(1) + " " + mdProp.id + " = " + propVal.presentation())
}
// Перебираем классы потомков (например у Документа это Реквизиты, ТабличныеЧасти, Формы)
for(var i = 0; i < mdc.childsClassesCount; i++)
{
var childMdClass = mdc.childClassAt(i)
// Покажем название на русском языке во множественной форме
text.push(indent + childMdClass.name(1, true))
// Теперь переберем потомков этого класса.
for(var chldidx = 0, c = mdObj.childObjectsCount(i); chldidx < c; chldidx++)
printMdObj(mdObj.childObject(i, chldidx), indent + "\t", text)
}
}