![]() |
#1 |
Участник
|
Поиск таблиц по EDT
Можно ли по определенному EDT выбрать все таблицы где данный EDT используется?.
|
|
![]() |
#2 |
Ищущий знания...
|
Цитата:
![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#3 |
Ищущий знания...
|
сейчас найду проект, выложу, может кому пригодится...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: AxTimur (1). |
![]() |
#4 |
Участник
|
![]() |
|
![]() |
#5 |
Moderator
|
Цитата:
в стандарте ничего не нашел
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Участник
|
конечно. при помощи перекрестных ссылок.
|
|
![]() |
#8 |
Ищущий знания...
|
Как вариант, но не очень удобно. Плюс я там добавил некоторые возможности...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#9 |
Участник
|
А ещё можно просто воспользоваться поиском по AOT. Я имею в виду вкладку 'Свойства', которая появляется при выборе режима 'Все узлы'
Но только учтите, что таким способом вы найдёте таблицы, которые используют непосредственно сам EDT, но не его наследников |
|
![]() |
#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). |
![]() |
#11 |
Участник
|
А чем поиск плох? выбираем узел Tables, проставляем фильтр по свойству ExtendedDataType и вперед
![]() упс.. опередили ![]()
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 30.10.2009 в 10:33. Причина: опередили |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#12 |
Участник
|
|
|
![]() |
#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; } } } } |
|
![]() |
#14 |
Ищущий знания...
|
Итак, подробно описывать долго, опишу вкратце, если будут вопросы спрашивайте
![]() Сразу оговорюсь по поводу использования перекрестных ссылок. Это как вариант, но не очень удобно, лично для меня. Функция собирает временную таблицу. Проверяются Table, View, Map, TmpTable (временные таблицы). В таблице это определяется типом строки. Так же показывается сколько всего строк в таблице, и сколько в таблице строк, в которых поле, использующее EDT НЕ пустое (эту возможность можно регулировать параметрами). Вызов функции напрямую выдает список EDT, из которого можно выбрать нужный. При выборе запускается поиск таблиц. Вот в кратце. Я ещё навесил на контекстное меню в EDT эту функцию. Axapta 3.0 SP3. В приложенном архиве проект и текстовый файл с методом, выводящим список EDT (просто у меня не было такого ![]() P.S. Просьба сильно не пинать, возможно реализация требует поправок ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: BOAL (2), raz (5), Ace of Database (1), Player1 (1). |
![]() |
#15 |
Участник
|
Спасибо.
А почему? |
|
![]() |
#16 |
Ищущий знания...
|
Если говорить в общем, то я ими пользуюсь, и перекрестные ссылки конечно выручают. но в конкретной задаче, получения списка таблиц использующих EDT, мне не хватало информации имеющейся в них. Поэтому не удобно. Ещё может возникнуть проблемка если вдруг по какой то причине ссылки не обновлены, можно упустить что нибудь важное....
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: DSPIC (1). |
![]() |
#17 |
Участник
|
|
|
![]() |
#18 |
Ищущий знания...
|
вот
Цитата:
сколько всего строк в таблице, и сколько в таблице строк, в которых поле, использующее EDT НЕ пустое
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
Теги |
законченный пример, как правильно, объект приложения, перекрестные ссылки, поиск, полезное |
|
![]() |
||||
Тема | Ответов | |||
Создание наследника EDT через Х++ | 12 | |||
Владельцы таблиц в БД аксапты | 11 | |||
Создание EDT в X++ | 9 | |||
Синхронизация таблиц при изменении EDT | 1 | |||
Список полей таблиц на базе конкретного EDT | 10 |
|