|  22.01.2008, 12:59 | #1 | 
| Участник | Есть ли у кого-нибудь такая штучечка? 
			
			Есть большой xpo в нём много объектов. Делаю импорт. Изменений в нём я знаю что мало. Переберать сравнением каждый объект, чтоб увидеть изменения не хочется. Так вот вопрос: Может у кого нибудь есть такая доработка и он ей поделится. Так чтоб галочку какую-нибудь отжать или что-то в этом роде и система как-нибудь показала только те объекты, которые изменены. Может штатное средство есть. Я не нашёл. Не хочется садится за программирование. А очень нужно. | 
|  | 
|  22.01.2008, 13:15 | #2 | 
| Участник | 
			
			Попробуйте загрузить проект в USP, а затем создать новый проект, используя сравнение слоев, корый будет содержать только измененнные в USP объекты
		 | 
|  | 
|  22.01.2008, 13:20 | #3 | 
| Участник | |
|  | 
|  22.01.2008, 13:26 | #4 | 
| Moderator | 
			
			Есть такая разработка. http://www.systomatics.com/Projects/...cts/proj13.htm 
				__________________ Андрей. | 
|  | |
| За это сообщение автора поблагодарили: zemlyn (2), Logger (2), gl00mie (5), miklenew (2), alex55 (1), zZ_TOP_Zz (1). | |
|  22.01.2008, 16:19 | #5 | 
| Участник | 
			
			Спасибо. То что доктор прописал. Правда она щас у меня то виснет, то не виснет. Не пойму из-за объёма или из-за определённых объектов. Методом научного тыка. Найду проблему отпишусь. | 
|  | 
|  22.01.2008, 17:08 | #6 | 
| Moderator | 
			
			Да, у меня на объемных проектах тоже подвисает... Может быть, не хватает ресурсов компа. 
				__________________ Андрей. | 
|  | 
|  22.01.2008, 17:28 | #7 | 
| Участник | 
			
			А подскажите, после нажатия на кнопку Keep Diffrence открывается много формочек Сравнение. Дальше неизмененённые объекты из дерева пропадают. А формочки Сравнение так и должны (все!) остаться открытыми? | 
|  | 
|  22.01.2008, 17:37 | #8 | 
| Moderator | 
			
			У меня никаких формочек не открывается. АХ 3.0SP3 CU1.
		 
				__________________ Андрей. | 
|  | 
|  22.01.2008, 19:41 | #9 | 
| NavAx | 
			
			В аксапте есть ссылка на интересный продукт, очень удобно, даже для очень больших проектов. http://www.araxis.com/ | 
|  | |
| За это сообщение автора поблагодарили: Logger (2), Aleksey_M (2). | |
|  12.08.2009, 15:00 | #10 | 
| Moderator | Цитата: 
		
			Сообщение от Dron AKA andy
			   Есть такая разработка. http://www.systomatics.com/Projects/...cts/proj13.htm 
				__________________ Андрей. | 
|  | 
|  12.08.2009, 17:34 | #11 | 
| Участник | Вариант решения. 
			
			Писал на коленке на 3.0, перевел на 4.0 \Classes\SysImportElements\compareNodes X++: private boolean compareNodes(FormTreeControl _formTreeControl, FormTreeItem _formTreeItem) { TreeNode treeNodeAOT; TreeNode treeNodeImport = NULL; int exportId; int flag = (#impGetCompareNode + #impKeepIds); boolean ret; ; if (_formTreeItem && _formTreeItem.stateBold()) { select firstonly tmpImportAot where tmpImportAot.TreeNodePath == _formTreeItem.data(); if (tmpImportAot) { treeNodeAOT = infolog.findNode(tmpImportAot.TreeNodePath); if (treeNodeAot) { ret = true; exportId = infolog.startImport(filename, flag); treeNodeImport = infolog.getImportedNode( exportId, tmpImportAot.UtilFileType, tmpImportAot.UtilElementType, tmpImportAot.treeNodeName, tmpImportAot.FilePos, flag); ret = SysCompare::silentCompare(SysTreeNode::newTreenode(treeNodeAOT), SysTreeNode::newTreenode(treeNodeImport)); infolog.endImport(exportId, 1); } } } return ret; } X++: public void markDifferentObjects(FormTreeControl _ftc) { int idx; FormTreeControl t = _ftc; FormTreeItem i; TreeItemIdx treeItemIdx; boolean checked, res; ; i = t.getItem(t.getRoot()); SysFormTreeControl::expandTree(t, i.idx()); while (i) { // KDV анализируем только конечные узлы дерева (листы - объекты АОТ): if (! strFind(i.data(), '\\', strLen(i.data()), -1)) { // KDV сравниваем последний слой в АОТ и слой XPO: res = this.compareNodes(t, i); if (res) SysFormTreeControl::deselectedTreeItem_checkBox(t, i.idx()); else SysFormTreeControl::selectedTreeItem_checkBox(t, i.idx()); while select forUpdate firstonly tmpImportAot where tmpImportAot.TreeNodePath == i.data() { tmpImportAot.Import = ! res; tmpImportAot.update(); } } else SysFormTreeControl::deselectedTreeItem_checkBox(t, i.idx()); i = t.getItem(t.getNextVisible(i.idx())); } } X++: void markDifferentObjects()
{
    ;
    sysImportElements.markDifferentObjects(AOTtree);
    tmpImportLabel_ds.executeQuery();
}\Forms\SysImportDialog\Designs\Design\[Group:BottomGrp]\[ButtonGroup:ButtonGroup]\Button:MarkDifferentObjects\Methods\clicked X++: void clicked()
{
    element.markDifferentObjects();
} | 
|  | |
| За это сообщение автора поблагодарили: Dron AKA andy (4), Small Den (1), Logger (5), leva (1), (1). | |
|  13.08.2009, 18:57 | #12 | 
| Moderator | 
			
			Доработал вариант Denicce под себя: нужно, чтобы неизмененные объекты удалялись из дерева, а оставались только содержащие изменения. Соответственно, вместо \Classes\SysImportElements\markDifferentObjects предлагается \Classes\SysImportElements\deleteEqualObjects: X++: public void deleteEqualObjects(FormTreeControl _ftc) { FormTreeControl treeControl = _ftc; FormTreeItem treeItem; Set itemIdxSet = new Set(Types::Integer); void deleteNodeWithEmptyParents(FormTreeItem _treeItem) { TreeItemIdx idx; TreeItemIdx childIdx; int i; boolean parentIsEmpty; if (_treeItem) { idx = _treeItem.idx(); itemIdxSet.add(idx); while select forUpdate firstonly tmpImportAot where tmpImportAot.TreeNodePath == _treeItem.data() { tmpImportAot.Import = false; tmpImportAot.update(); } parentIsEmpty = true; childIdx = treeControl.getChild(treeControl.getParent(idx)); while (childIdx) { if (!itemIdxSet.in(childIdx)) { parentIsEmpty = false; break; } childIdx = treeControl.getNextSibling(childIdx); } if (parentIsEmpty) deleteNodeWithEmptyParents(treeControl.getItem(treeControl.getParent(idx))); } } itemIdxSet = new Set(Types::Integer); treeItem = treeControl.getItem(treeControl.getRoot()); if (treeItem) { SysFormTreeControl::expandTree(treeControl, treeItem.idx()); while (treeItem) { // KDV анализируем только конечные узлы дерева (листы - объекты АОТ): if (! strFind(treeItem.data(), '\\', strLen(treeItem.data()), -1)) { // KDV сравниваем последний слой в АОТ и слой XPO: if (this.compareNodes(treeControl, treeItem)) deleteNodeWithEmptyParents(treeItem); } treeItem = treeControl.getItem(treeControl.getNextVisible(treeItem.idx())); } SysFormTreeControl::deleteTreeItem(treeControl, itemIdxSet); } } 
				__________________ Андрей. Последний раз редактировалось Dron AKA andy; 25.08.2009 в 12:14. | 
|  | |
| За это сообщение автора поблагодарили: Small Den (1), Denicce (1), gl00mie (3), (1). | |
|  14.08.2009, 10:28 | #13 | 
| Участник | 
			
			а compareNodes_NV это мой compareNodes?
		 | 
|  | 
|  14.08.2009, 11:25 | #14 | 
| Moderator | 
			
			Да Исправил в своем сообщении. 
				__________________ Андрей. | 
|  | 
|  17.08.2009, 13:12 | #15 | 
| Гость | 
			
			Полезная штука! Выложите пожалуйста в виде .XPO Кстати, на 2009 будет работать? | 
|  | 
|  17.08.2009, 14:39 | #16 | 
| Участник | 
			
			В таком виде легче себе перенести, благо не так много изменений. Плюс не затрагиваются ваши изменения указанных объектов. Думаю, на девятке тоже работать будет, но я не проверял. | 
|  | 
|  17.08.2009, 16:11 | #17 | 
| Участник | |
|  | 
|  17.08.2009, 17:17 | #18 | 
| Гость | 
			
			Потестил - вобщем работает с существенными ограничениями... Если класс выгружен только с измененного слоя - неверно отмечает, что он изменен. Если таблица выгружена только с измененного слоя - валится в throw error 'InventQualityOrderTable' does not have property 'ConfigurationKey'. Если класс выгружен полностью и нажать на метод от Dron AKA andy выпадает в стек трейс (оригинальный метод отрабатывает корректно) | 
|  | 
|  18.08.2009, 10:48 | #19 | 
| Участник | 
			
			Вариант для 3.0. \Classes\SysImportElements\compareNodes X++: private boolean compareNodes(FormTreeControl _formTreeControl, FormTreeItem _formTreeItem) { TreeNode treeNodeAOT; TreeNode treeNodeImport = NULL; int exportId; int flag = (#impGetCompareNode + #impKeepIds); boolean ret; ; if (_formTreeItem && _formTreeItem.stateBold()) { select firstonly tmpImportAot where tmpImportAot.TreeNodePath == _formTreeItem.data(); if (tmpImportAot) { treeNodeAOT = infolog.findNode(tmpImportAot.TreeNodePath); if (treeNodeAot) { ret = true; exportId = infolog.startImport(filename, flag); treeNodeImport = infolog.getImportedNode( exportId, tmpImportAot.UtilFileType, tmpImportAot.UtilElementType, tmpImportAot.treeNodeName, tmpImportAot.FilePos, flag); ret = new SysCompare(true).compareTreenodes(treeNodeAOT, treeNodeImport); infolog.endImport(exportId, 1); } } } return ret; } | 
|  | |
| За это сообщение автора поблагодарили: olesh (1), gl00mie (5). | |
|  18.08.2009, 10:49 | #20 | 
| Участник | Цитата: 
		
			Сообщение от AX2009
			   Потестил - вобщем работает с существенными ограничениями... Если класс выгружен только с измененного слоя - неверно отмечает, что он изменен. Если таблица выгружена только с измененного слоя - валится в throw error 'InventQualityOrderTable' does not have property 'ConfigurationKey'. | 
|  | 
| Теги | 
| araxis, ax2009, ax3.0, ax4.0, xpo, документация, законченный пример, импорт, инструменты, полезное, разработка, сравнение, сравнение систем, сравнение слоев | 
|  | 
| 
 |