|  06.10.2004, 11:07 | #1 | 
| Участник | Список полей таблиц на базе конкретного EDT 
			
			AXAPTA 2.5 SP3 Как получить список полей таблиц, созданных на базе конкретного EDT? Точнее так: Есть EDT-base, на его основе может быть создано множестов EDT-child, на основе каждого EDT-child также могут быть созданы множество EDT-child-child Так вот, мне надо получить список всех полей созданных на базе либо EDT-base, либо на базе любых EDT-наследников от EDT-base Перекрестные ссылки, в принципе, использовать можно, но это большой напряг: -) Выводится список вообще всех объектов имеющих ссылки на EDT и фильтрации эта куча не поддается! Точнее, попытка настроить фильтр приводит к пустой выборке. -) Показывается список объектов только непосредственно искомого EDT, а не его наследников. Для каждого из них надо повторять поиск по перекрестным ссылкам AXAPTA 2.5 SP3 | 
|  | 
|  06.10.2004, 11:43 | #2 | 
| Модератор | 
			
			А зачем, если не секрет? Если, допустим, просто для переименования, то в 3,0 (не знаю как в 2,5) есть функция renamePrimaryKey. По идее, она должна находить и переименовывать все узлы. Возможно, есть что-либо похожее... Иначе, имхо, все равно придеться лазить по перекрестным ссылкам  С Уважением, Георгий. | 
|  | 
|  06.10.2004, 11:52 | #3 | 
| Участник | 
			
			типа может так? X++: static void LookPropertiesInTables1(Args _args) { TreeNode tablesRoot; TreeNode newTable, newField; AOTTableFieldList newTableFields; TreeNode tableField; int edtPos; str properties; str tablename; UtilIdElements UtilIdElements; ; tablesRoot = TreeNode::findNode("\\Data Dictionary\\Tables"); newTable = tablesRoot.AOTfirstChild(); while (newTable) { newField = newTable.AOTfindChild("Fields"); newField = newField.AOTfirstChild(); while (newField) { properties = newField.AOTgetProperties(); edtPos = strlen(properties); if(strscan(properties, "tableId",1,strlen(properties))) { print newTable.treeNodeName(); } newField = newField.AOTnextSibling(); } newTable = newTable.AOTnextSibling(); } } | 
|  | 
|  06.10.2004, 12:00 | #4 | 
| Участник | 
			
			Да не секрет, конечно. Проблема в следующем: когда создали нашу базу данных, то оставили выравнивание по правому краю (Adjustment = Right). В результате, база данных уже имеет немеренный размер (на сегодня 130ГБ) и после каждого закрытия склада подрастает примерно на 10ГБ. Это без учета регулярного пополнения базы в рабочем порядке. Просто сделать выравнивание по левому краю в EDT Num - не получится  Кроме всего прочего, номера заказов и закупок (да и вообще всех документов) - это просто числа без префиксов. Выравнивание по левому краю нарушит порядок следования. Идея заключается в том, чтобы сделать выравнивание по левому краю хотя бы для тех полей, где порядок следования не имеет значения, но эти поля занимают существенную часть базы данных. Например, номер лота (InventTransId) Проблема в том, что в базу вводилось масса дополнительных полей и я просто не уверен, что во всех новых полях, которые должны хранить ссылку на номер лота в качестве EDT использовался именно InvetTransId или InventTransIdBase. Вполне возможно, что там использовался напрямую NUM или какие-то его наследники. Вот я и хотел получить список всех полей, которые были созданы на базе NUM или его наследников. В идеале, получить вообще полный список полей с выравниванием по правому краю (не все они наследники от NUM). И дальше уже смотреть как и что надо менять. | 
|  | 
|  06.10.2004, 12:06 | #5 | 
| Модератор | 
			
			Да, печальная задача.... Чем-то напоминает Авгиевы конюшни    | 
|  | 
|  06.10.2004, 13:03 | #6 | 
| Участник | 
			
			Нормальная задача, одна из многих, которые мы делаем для оптимизации базы. Пока это только исследование эффективности данного решения на размер БД и скорость обработки запросов.
		 | 
|  | 
|  06.10.2004, 14:12 | #7 | 
| Administrator | Re: Список полей таблиц на базе конкретного EDT Цитата: 
		
			Изначально опубликовано Владимир Максимов  -) Выводится список вообще всех объектов имеющих ссылки на EDT и фильтрации эта куча не поддается! Точнее, попытка настроить фильтр приводит к пустой выборке. \\Data Dictionary\\Tables\\*\\Fields\\* Вообще, проще, по-моему, все-таки с таблицами перекрестных ссылок поработать, чем все поля в произведении со всеми типами перебирать. 
				__________________ Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me | 
|  | 
|  06.10.2004, 14:20 | #8 | 
| Участник | 
			
			ddadream Спсибо за намек. Написал Job который выводит все что нужно. Maxim Gorbunov Опять забыл, что слэш - это управляющий символ. Указание двойного слэша при настройке условия фильтра помогло. Спасибо. | 
|  | 
|  06.10.2004, 14:37 | #9 | 
| Модератор | 
			
			вот, на коленке собрано PHP код: 
			  | 
|  | |
| За это сообщение автора поблагодарили: Yprit (1). | |
|  06.10.2004, 14:43 | #10 | 
| Участник | 
			
			Vadik  Спасибо. Я сделал примерно то же самое, только за основу взял перебор в дереве AOT, как показал ddadream. PS: Поле без типа - это, например, поле на базе ENUM. Так что не обязательно это неаккуратность. | 
|  | 
|  06.10.2004, 14:45 | #11 | 
| Модератор | Цитата: 
		
			Изначально опубликовано Владимир Максимов  Поле без типа - это, например, поле на базе ENUM. Так что не обязательно это неаккуратность.   | 
|  |