demon_infernal писал(а):
Набираем в коде модуля ПланыСчетов (Или ПланСчетов, если в запросе), ставим точку, а снегопат предлагает сперва выбор плана счетов, а затем список, подобный списку процедур и функций модуля, в котором можно написать идентификатор или код счета, нажать энтер и получить нужный результат. мечты, мечты...
У меня пока не получилось добавить в массив подсказок свои элементы, ждем развития от Саши, телепата, он обещал, что будет развитая возможность добавить свой список подсказок (думал сделать типа подсказки CamelCase - набираешь СКД, а подсказка предлагает СистемаКомпоновкиДанных и т.д.)
Но как для обучения(извращений) я бы добавил 3 шаблона "Предопределенный элемент спр.", "Предопределенный элемент ПВХ", "Предопределенный элемент ПС", потом на примере автоматом бы не ставил первый попавшийся элемент, а прошелся бы по дереву метаданных(смотри скрипт во вложении, фильтр можно посмотреть в extSearch, я там просто пропускал некоторые объекты, а тебе надо наоборот все пропустить кроме как Справочники или ПС и т.д.), определял бы список справочников, на примере choiceHelpTopic выводил бы только те, где есть предопредленные данные (надо у Орефкова уточнить или поковыряться со внутренним представлением - достаточно только признак, что есть предопределенные), позволял бы выбрать пользователю необходимый справочник(тут красиво работают отборы), генерил бы n нажатий клавиши вниз (все тот же choiceHelpTopic ) и последний штрих, опять таки распарсить диалоговое окошко с предопределенными данными и вывести в быстрый выбор (это уже есть в примере
http://snegopat.ru/scripts/artifact/26d65c442ab6d2025259d9e73f749d1f3d48a08e)
Код:
function macrosВыводОбъектаМетаданных(){
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) + " id "+mdc.id)
text.push(indent+"mdObj "+mdObj.id);
// Переберем свойства объекта. Количество доступных свойств объекта
// определяется в его классе. Сами свойства объекта получаются методом
// property(индекс), где индекс может быть - порядковым номером свойства (с нуля)
// или названием свойства, или строкой с гуидом свойства
for(var i = 0, c = mdc.propertiesCount; i < c; i++)
{
var mdProp = mdc.propertyAt(i)
var propVal = toV8Value(mdObj.property(i))
toV8Value(mdRefValue).toStringInternal()
pres = propVal.presentation() + " to string "+propVal.toStringInternal();
if (propVal.presentation()=="НеизвестныйОбъект"){
}
if (mdProp.name(1)=="Предопределенные"){
//pres =pres+":"+toV8Value(mdObj).toStringInternal();
}
text.push(indent + " prop " + mdProp.name(1) + " " + mdProp.id + " = " + propVal.presentation()+" "+pres);
}
// Перебираем классы потомков (например у Документа это Реквизиты, ТабличныеЧасти, Формы)
for(var i = 0; i < mdc.childsClassesCount; i++)
{
var childMdClass = mdc.childClassAt(i)
// Покажем название на русском языке во множественной форме
text.push(indent + childMdClass.name(1, true) + " id "+childMdClass.id)
// Теперь переберем потомков этого класса.
for(var chldidx = 0, c = mdObj.childObjectsCount(i); chldidx < c; chldidx++)
printMdObj(mdObj.childObject(i, chldidx), indent + "\t", text)
}
}