30.10.2009, 09:46 | #1 |
Участник
|
Поиск таблиц по EDT
Можно ли по определенному EDT выбрать все таблицы где данный EDT используется?.
|
|
30.10.2009, 09:49 | #2 |
Ищущий знания...
|
Я как то тоже заморочился над такой проблемой, в стандарте ничего не нашел, поэтому написал своё
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
30.10.2009, 09:52 | #3 |
Ищущий знания...
|
сейчас найду проект, выложу, может кому пригодится...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: AxTimur (1). |
30.10.2009, 09:53 | #4 |
Участник
|
|
|
30.10.2009, 09:57 | #5 |
Moderator
|
Цитата:
в стандарте ничего не нашел
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
30.10.2009, 09:59 | #6 |
Участник
|
|
|
30.10.2009, 10:08 | #7 |
Участник
|
конечно. при помощи перекрестных ссылок.
|
|
30.10.2009, 10:21 | #8 |
Ищущий знания...
|
Как вариант, но не очень удобно. Плюс я там добавил некоторые возможности...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
30.10.2009, 10:23 | #9 |
Участник
|
А ещё можно просто воспользоваться поиском по AOT. Я имею в виду вкладку 'Свойства', которая появляется при выборе режима 'Все узлы'
Но только учтите, что таким способом вы найдёте таблицы, которые используют непосредственно сам EDT, но не его наследников |
|
30.10.2009, 10:30 | #10 |
Axapta
|
Если перекрестные ссылки по каким-либо причинам не подходят, то примерно так. Быстрее обычного поиска.
X++: static void findTablesWithEDT) { Dictionary dictionary = new Dictionary(); SysDictTable dictTable; SysDictField dictField; int i, j; int typeIdToFind = typeId2ExtendedTypeId(typeid(RContractCode)); int tableCount; str tableInfo; ; for (i=1; i<=dictionary.tableCnt() ; i++) { dictTable = new SysDictTable(dictionary.tableCnt2Id(i)); if (!dictTable.isMap() && !dictTable.isView() && !dictTable.isSystemTable() && !dictTable.isTmp()) { for (j=1; j<=dictTable.fieldCnt(); j++) { dictField = dictTable.fieldObject(dictTable.fieldCnt2Id(j)); if (dictField.typeId() == typeIdToFind) { if (!dictTable.labelLabelId()) { tableInfo = dictTable.name(); } else { tableInfo = strfmt ('%1 - %2', dictTable.name(), dictTable.Label()); } info(tableInfo, '', new SysInfoAction_newWindow(dictTable.path())); tableCount++; break; } } } } info(strfmt("Всего таблиц - %1", tableCount)); } |
|
|
За это сообщение автора поблагодарили: AxTimur (1). |
30.10.2009, 10:32 | #11 |
Участник
|
А чем поиск плох? выбираем узел Tables, проставляем фильтр по свойству ExtendedDataType и вперед
упс.. опередили
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 30.10.2009 в 10:33. Причина: опередили |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
30.10.2009, 10:33 | #12 |
Участник
|
|
|
30.10.2009, 10:35 | #13 |
Участник
|
Всем большое спасибо я разобрался. Вот ответ :
X++: Dictionary dictionary = new Dictionary(); int i, j; DictTable dictTable; DictField dictField; ; #AviFiles for (i = 1; i <= dictionary.tableCnt(); i++) { dictTable = new DictTable(dictionary.tableCnt2Id(i)); if (!dictTable.isTmp() && !dictTable.isSystemTable() && !dictTable.isView() && !dictTable.isMap()) { for (j = 1; j <= dictTable.fieldCnt(); j++) { dictField = new DictField(dictTable.id(), dictTable.fieldCnt2Id(j)); if(dictField.typeId() == extendedTypeName2Id_RU("DlvTransportId")) { Print strfmt("%1 , %2 ", dictTable.id(), dictField.typeId()); Pause; } } } } |
|
30.10.2009, 10:37 | #14 |
Ищущий знания...
|
Итак, подробно описывать долго, опишу вкратце, если будут вопросы спрашивайте
Сразу оговорюсь по поводу использования перекрестных ссылок. Это как вариант, но не очень удобно, лично для меня. Функция собирает временную таблицу. Проверяются Table, View, Map, TmpTable (временные таблицы). В таблице это определяется типом строки. Так же показывается сколько всего строк в таблице, и сколько в таблице строк, в которых поле, использующее EDT НЕ пустое (эту возможность можно регулировать параметрами). Вызов функции напрямую выдает список EDT, из которого можно выбрать нужный. При выборе запускается поиск таблиц. Вот в кратце. Я ещё навесил на контекстное меню в EDT эту функцию. Axapta 3.0 SP3. В приложенном архиве проект и текстовый файл с методом, выводящим список EDT (просто у меня не было такого , метод добавить в Global) P.S. Просьба сильно не пинать, возможно реализация требует поправок
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: BOAL (2), raz (5), Ace of Database (1), Player1 (1). |
30.10.2009, 12:19 | #15 |
Участник
|
Спасибо.
А почему? |
|
30.10.2009, 12:29 | #16 |
Ищущий знания...
|
Если говорить в общем, то я ими пользуюсь, и перекрестные ссылки конечно выручают. но в конкретной задаче, получения списка таблиц использующих EDT, мне не хватало информации имеющейся в них. Поэтому не удобно. Ещё может возникнуть проблемка если вдруг по какой то причине ссылки не обновлены, можно упустить что нибудь важное....
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: DSPIC (1). |
30.10.2009, 12:54 | #17 |
Участник
|
|
|
30.10.2009, 13:10 | #18 |
Ищущий знания...
|
вот
Цитата:
сколько всего строк в таблице, и сколько в таблице строк, в которых поле, использующее EDT НЕ пустое
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
Теги |
законченный пример, как правильно, объект приложения, перекрестные ссылки, поиск, полезное |
|
Похожие темы | ||||
Тема | Ответов | |||
Создание наследника EDT через Х++ | 12 | |||
Владельцы таблиц в БД аксапты | 11 | |||
Создание EDT в X++ | 9 | |||
Синхронизация таблиц при изменении EDT | 1 | |||
Список полей таблиц на базе конкретного EDT | 10 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|