orefkov писал(а):
Вот небольшой пример, как обойти грид с деревом метаданных.
Код:
function walkDS(parentRow, level)
{
for(var row = parentRow.firstChild; row; row = row.next)
{
var value = row.getCellValue(0) // Value есть не всегда, многие источники просто задают текст в оформлении ячейки
var ca = row.getCellAppearance(0) // Либо наоборот, некоторые источники не задают оформление, а просто возвращают value
Message(level + ca.text, ca.picture)
walkDS(row, level + " ") // Обойдем дочерние строки
}
}
В добавление к твоему код использую следующий код для анализа модальных окон
Код:
//{ Анализ модальных окон
SelfScript.self['macrosВключить анализ модальных окон'] = function() {
events.connect(windows, "onDoModal", SelfScript.self, "AnalyseModalWindow");
}
SelfScript.self['macrosОтключить анализ модальных окон'] = function() {
events.disconnect(windows, "onDoModal", SelfScript.self, "AnalyseModalWindow")
}
function AnalyseModalWindow(dlgInfo)
{
if(dlgInfo.stage == openModalWnd)
{
Message("dlgInfo.Caption = <"+dlgInfo.Caption+">");
for(var c = 0; c < dlgInfo.form.controlsCount; c++)
{
var ctr = dlgInfo.form.getControl(c)
Message(" name <"+ctr.name + "> , id <" + ctr.id + ">, value <" + ctr.value+">")
if (ctr.dataSource && ctr.dataSource.root){
try{
walkDS(ctr.dataSource.root, "-")
}
catch(e)
{
Message("Ошибка разбора dataSource на контроле " + ctr.name + ": " + e.description)
}
}
}
}
}
//}
И при вызове некоторых модальных окон выдается ошибка "Ошибка разбора dataSource на контроле ХХХ: Недостаточно памяти"
Например, включаем анализ модальных окон, добавляем какой-нибудь реквизит в конфигурацию, нажимаем Ф7 (обновить базу данных), получаем модальное окно реструктуризации.
И тогда скрипт выдает следующий код в окне сообщений
Цитата:
dlgInfo.Caption = <Реорганизация информации>
name <3> , id <6>, value <Изменения в структуре информации конфигурации >
name <BtnOK> , id <7>, value <undefined>
name <BtnCancel> , id <8>, value <undefined>
name <ListChanging> , id <9>, value <>
Ошибка разбора dataSource на контроле ListChanging: Недостаточно памяти
Что не так у меня? или это ошибка Снегопата?