Снегопат https://snegopat.ru/forum/ |
|
Как юзать интерфейс для чтения списков IDataSource ? https://snegopat.ru/forum/viewtopic.php?f=1&t=251 |
Страница 1 из 1 |
Автор: | artbear [ 10 сен 2012, 07:03 ] |
Заголовок сообщения: | Как юзать интерфейс для чтения списков IDataSource ? |
Цитата: 1.2.0.2 - Добавлен программный интерфейс для чтения различных списков во внутренних формах 1С. IDataSource, верно? Саш, приведи, пожалуйста, пример работы с новым интерфейсом! например, для какого-нибудь системного окна Конфигуратора |
Автор: | orefkov [ 10 сен 2012, 08:26 ] |
Заголовок сообщения: | Re: Как юзать интерфейс для чтения списков IDataSource ? |
Вот небольшой пример, как обойти грид с деревом метаданных. Для простоты фокус должен быть на окне конфигурации Код: 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 + " ") // Обойдем дочерние строки } } function macrosЗапуститьТест() { // Фокус должен стоять в окне конфигурации var form = windows.getActiveView().getInternalForm() if(form) { var ctr = form.getControl(0) // Получаем грид - дерево метаданных walkDS(ctr.dataSource.root, "") } } |
Автор: | orefkov [ 10 сен 2012, 08:29 ] |
Заголовок сообщения: | Re: Как юзать интерфейс для чтения списков IDataSource ? |
Пока можно просто перебрать источник данных. Позже добавлю интерфейс для работы с самим гридом - перебрать колонки, свернуть/развернуть узлы и тд и тп. |
Автор: | artbear [ 13 сен 2012, 07:47 ] |
Заголовок сообщения: | Re: Как юзать интерфейс для чтения списков IDataSource ? |
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: Недостаточно памяти Что не так у меня? или это ошибка Снегопата? |
Автор: | orefkov [ 13 сен 2012, 07:50 ] |
Заголовок сообщения: | Re: Как юзать интерфейс для чтения списков IDataSource ? |
спасибо за инфу, разберусь. |
Автор: | artbear [ 13 сен 2012, 07:57 ] |
Заголовок сообщения: | Re: Как юзать интерфейс для чтения списков IDataSource ? |
Еще вопрос по IDataRow: Есть методы Function getCellAppearance(columnID As Long) As ICellAppearance Function getCellValue(columnID As Long) как определить количество колонок для правильного указания columnID ? |
Автор: | artbear [ 13 сен 2012, 07:58 ] |
Заголовок сообщения: | Re: Как юзать интерфейс для чтения списков IDataSource ? |
orefkov писал(а): Позже добавлю интерфейс для работы с самим гридом - перебрать колонки, свернуть/развернуть узлы и тд и тп. Да, вот этого очень не хватает очень жду. |
Автор: | artbear [ 13 сен 2012, 08:26 ] |
Заголовок сообщения: | Re: Как юзать интерфейс для чтения списков IDataSource ? |
Пока сделал временную заглушку Код: if ( dstTree == parentRow.owner.type ) walkDS(row, level + " ") // Обойдем дочерние строки для dstGrid как раз и вылетает в бесконечный цикл, т.е. ошибка Снегопата для dstGrid достаточно первый уровень просмотреть. |
Автор: | artbear [ 13 сен 2012, 09:13 ] |
Заголовок сообщения: | Re: Как юзать интерфейс для чтения списков IDataSource ? |
Еще баг: Код: var value = row.getCellValue(colcount) var ca = row.getCellAppearance(colcount) Этот код не выдает ошибок для любых значений colcount, хоть тысячу, хоть миллион неудобно разбирать источник Но только для случая dstGrid ! |
Автор: | artbear [ 13 сен 2012, 09:37 ] |
Заголовок сообщения: | Re: Как юзать интерфейс для чтения списков IDataSource ? |
orefkov писал(а): Вот небольшой пример, как обойти грид с деревом метаданных. Для простоты фокус должен быть на окне конфигурации Код: function walkDS(parentRow, level) { for(var row = parentRow.firstChild; row; row = row.next) { var value = row.getCellValue(6) // ВОТ ЗДЕСЬ var ca = row.getCellAppearance(6) // ВОТ ЗДЕСЬ } } function macrosЗапуститьТест() { // Фокус должен стоять в окне конфигурации var form = windows.getActiveView().getInternalForm() if(form) { var ctr = form.getControl(0) // Получаем грид - дерево метаданных walkDS(ctr.dataSource.root, "") } } Если для окна конфигурации вызвать макрос ЗапуститьТест из вышеприведенного кода, то 1С либо падает, либо перестают вызываться макросы по Цтрл+М |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |