AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.01.2008, 12:59   #1  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Есть ли у кого-нибудь такая штучечка?
Есть большой xpo в нём много объектов.
Делаю импорт.
Изменений в нём я знаю что мало.
Переберать сравнением каждый объект, чтоб увидеть изменения не хочется.
Так вот вопрос:
Может у кого нибудь есть такая доработка и он ей поделится.
Так чтоб галочку какую-нибудь отжать или что-то в этом роде и система как-нибудь показала только те объекты, которые изменены.
Может штатное средство есть.
Я не нашёл.
Не хочется садится за программирование.
А очень нужно.
Старый 22.01.2008, 13:15   #2  
tourist is offline
tourist
Участник
 
21 / 14 (1) ++
Регистрация: 03.05.2006
Попробуйте загрузить проект в USP, а затем создать новый проект, используя сравнение слоев, корый будет содержать только измененнные в USP объекты
Старый 22.01.2008, 13:20   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от tourist Посмотреть сообщение
Попробуйте загрузить проект в USP, а затем создать новый проект, используя сравнение слоев, корый будет содержать только измененнные в USP объекты
Вариант конечно, но геморойный какой-то.
Лучше уж код написать.
Мне же не на один раз такое нужно.
Старый 22.01.2008, 13:26   #4  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Есть такая разработка.
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  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Спасибо. То что доктор прописал.
Правда она щас у меня то виснет, то не виснет.
Не пойму из-за объёма или из-за определённых объектов.
Методом научного тыка.
Найду проблему отпишусь.
Старый 22.01.2008, 17:08   #6  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Да, у меня на объемных проектах тоже подвисает...
Может быть, не хватает ресурсов компа.
__________________
Андрей.
Старый 22.01.2008, 17:28   #7  
zemlyn is offline
zemlyn
Участник
Аватар для zemlyn
 
146 / 44 (2) +++
Регистрация: 28.01.2004
А подскажите, после нажатия на кнопку Keep Diffrence открывается много формочек Сравнение.
Дальше неизмененённые объекты из дерева пропадают.
А формочки Сравнение так и должны (все!) остаться открытыми?
Старый 22.01.2008, 17:37   #8  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
У меня никаких формочек не открывается. АХ 3.0SP3 CU1.
__________________
Андрей.
Старый 22.01.2008, 19:41   #9  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
В аксапте есть ссылка на интересный продукт, очень удобно, даже для очень больших проектов.

http://www.araxis.com/
Миниатюры
Нажмите на изображение для увеличения
Название: araxis.jpg
Просмотров: 765
Размер:	228.8 Кб
ID:	3160  
Изображения
 
За это сообщение автора поблагодарили: Logger (2), Aleksey_M (2).
Старый 12.08.2009, 15:00   #10  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Цитата:
Сообщение от Dron AKA andy Посмотреть сообщение
Есть такая разработка.
http://www.systomatics.com/Projects/...cts/proj13.htm
Кто-нибудь адаптировал это дело на DAX4? Хочется загрузить, вдруг кто уже заморочился до меня, чтоб не возиться...
__________________
Андрей.
Старый 12.08.2009, 17:34   #11  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
Вариант решения.
Писал на коленке на 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;
}
\Classes\SysImportElements\markDifferentObjects
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()));
    }
}
\Forms\SysImportDialog\Methods\markDifferentObjects
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  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Доработал вариант 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  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
а compareNodes_NV это мой compareNodes?
Старый 14.08.2009, 11:25   #14  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Да
Исправил в своем сообщении.
__________________
Андрей.
Старый 17.08.2009, 13:12   #15  
AX2009
Гость
 
n/a
Полезная штука! Выложите пожалуйста в виде .XPO

Кстати, на 2009 будет работать?
Старый 17.08.2009, 14:39   #16  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
В таком виде легче себе перенести, благо не так много изменений. Плюс не затрагиваются ваши изменения указанных объектов.
Думаю, на девятке тоже работать будет, но я не проверял.
Старый 17.08.2009, 16:11   #17  
olesh is offline
olesh
Участник
 
58 / 26 (1) +++
Регистрация: 02.04.2002
Адрес: Москва
Цитата:
Сообщение от Denicce Посмотреть сообщение
Писал на коленке на 3.0, перевел на 4.0
А для 3.0 не осталось варианта?
Старый 17.08.2009, 17:17   #18  
AX2009
Гость
 
n/a
Потестил - вобщем работает с существенными ограничениями...
Если класс выгружен только с измененного слоя - неверно отмечает, что он изменен.
Если таблица выгружена только с измененного слоя - валится в throw error 'InventQualityOrderTable' does not have property 'ConfigurationKey'.

Если класс выгружен полностью и нажать на метод от Dron AKA andy выпадает в стек трейс (оригинальный метод отрабатывает корректно)
Старый 18.08.2009, 10:48   #19  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
Вариант для 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;
}
остальные методы такие же, как и в 4.0.
За это сообщение автора поблагодарили: olesh (1), gl00mie (5).
Старый 18.08.2009, 10:49   #20  
Denicce is offline
Denicce
Участник
 
62 / 54 (2) ++++
Регистрация: 22.03.2005
Адрес: Москва
Цитата:
Сообщение от AX2009 Посмотреть сообщение
Потестил - вобщем работает с существенными ограничениями...
Если класс выгружен только с измененного слоя - неверно отмечает, что он изменен.
Если таблица выгружена только с измененного слоя - валится в throw error 'InventQualityOrderTable' does not have property 'ConfigurationKey'.
а стандартное сравнение из контекстного меню в списке объектов в окне импорта работает нормально в обоих случаях?
Теги
araxis, ax2009, ax3.0, ax4.0, xpo, документация, законченный пример, импорт, инструменты, полезное, разработка, сравнение, сравнение систем, сравнение слоев

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
А в СП6 есть что-нибудь про зарплату? Arahnid DAX: Программирование 5 10.05.2007 12:46
Axapta Report Designer vs. Something Андре DAX: Программирование 39 18.07.2005 11:06
А кто нибудь пробовал получать налоговую отчетность в системе? Sergioso DAX: Функционал 46 17.01.2005 14:56
Есть у кого ни будь Job ик для групповой замены поля dataareaid в группе таблиц ShadowFromXZone DAX: Функционал 7 13.10.2004 12:48
У кого есть вопросы по модулю Проекты AlexFK DAX: Функционал 2 30.04.2004 16:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:04.