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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.06.2010, 13:54   #1  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Изменить отчеты
Добрый день!

AX 3.0 SP2

Появилась задача сделать в 20ти отчетах вместо жирных линий - тонкие, и убрать весь жирный шрифт с целью экономии тонера (правда не понятно в чем экономия )

В общем руками делать было лень, и я написал Job который должен решить эту задачу. Но дело все в том, что изменения не вступают в силу и линии не меняются,
а так же отчеты не сохраняются в AOT.
Перепробовал кучу вариантов, но понять в чем дело так и не смог. Может кто сталкивался с данной проблемой?

Суть в том, что я кинул все изменяемые отчеты к себе в проект, и проходя по каждому,
хочу изменить "всё жирное" на "тонкое".
После прохода по контролам собственно и не происходит сохранения.

Вот собственно код:

X++:
static void Job10(Args _args)
{
    int                     reportCnt,
                            sectionCnt,
                            mainSectionCnt,
                            sectionQty;
 
    Map                     reportMap,
                            SectionMap, // здесь сохраняются названия 
                                               //секций, т.к.  SectionGroup - это отдельный класс и как 
                                               //определить тип секции я не разобрался
                            SubSectionMap; //на всякий случай но не используется
 
    str                     name,
                            properties;
 
    Args                    args;
    Object                  object;
    Boolean                 subSection;
 
    Report                  report;
    ReportDesign            rDesign;
    ReportSection           rSection;
    ReportSection           rHdrSection;
    ReportSectionGroup      rSectionGrp;
    ReportControl           rControl;
    ReportStringControl     rStrControl;
    ReportDateControl       rDateControl;
    ReportIntegerControl    rIntControl;
    ReportEnumControl       rEnumControl;
    ReportRealControl       rRealControl;
    ReportShapeControl      rShapeControl;
    ReportTextControl       rTxtControl;
    ReportTimeControl       rTimeControl;
 
    ReportRun               rRun;
 
    ReportBlockType          rbt;
 
    TreeNode                tn,             tnReport,   tnDesign, tnSection;
    TreeNodeIterator        tnIterator,     tnDesignIt;
    ProjectNode             pn, pnChild;
 
    // метод который смотрит тип контрола и меняет его св-ва
    void editControl(ReportSection _reportSection, int _ctrlQty)
    {
        int         curControl = 1;
        TreeNode    tnControl;
        ;
 
        while(curControl <= _ctrlQty)
        {
            rControl    = rSection.controlNo(curControl);
            name        = rControl.treeNodeName();
            tnControl   = rSection.AOTfindChild(rControl.treeNodeName());
 
            if(rControl && _ctrlQty > 0 && rControl.treeNodeName() != 'Methods')
            {
                Switch(rControl.controlType())
                {
                    case ReportFieldType::String :
                         rStrControl = rControl;
                         if(rStrControl.bold() > 4)
                         {
                            Properties = setProperty(tnControl.AOTgetProperties(), ' Bold', 'Normal');
                            tnControl.AOTsetProperties(Properties);
                         }
                         break;
                    case ReportFieldType::Box :
                         rShapeControl = rControl;
 
                         if(rShapeControl.thickness() > LineThickness::Hairline)
                         {
                           Properties = setProperty(rShapeControl.AOTgetProperties(), ' thickness', 'Hairline');
                            tnControl.AOTsetProperties(Properties);
                         }
                         break;
 
                    case ReportFieldType::Date :
                         rDateControl = rControl;
                         if(rDateControl.bold() > 4)
                         {
                           Properties = setProperty(tnControl.AOTgetProperties(), ' Bold', 'Normal');
                            tnControl.AOTsetProperties(Properties);
                         }
                        break;
                    case ReportFieldType::Integer :
                         rDateControl = rControl;
                         if(rDateControl.bold() > 4)
                         {
                           Properties = setProperty(tnControl.AOTgetProperties(), ' Bold', 'Normal');
                            tnControl.AOTsetProperties(Properties);
                         }
                         break;
                    case ReportFieldType::Real :
                         rRealControl = rControl;
                         if(rRealControl.bold() > 4)
                         {
                           Properties = setProperty(tnControl.AOTgetProperties(), ' Bold', 'Normal');
                            tnControl.AOTsetProperties(Properties);
                         }
                         break;
                    case ReportFieldType::Text :
                         rTxtControl = rControl;
                         if(rTxtControl.bold() > 4)
                         {
                           Properties = setProperty(tnControl.AOTgetProperties(), ' Bold', 'Normal');
                            tnControl.AOTsetProperties(Properties);
                         }
                         break;
                    case ReportFieldType::Enum :
                         rEnumControl = rControl;
                         if(rDateControl.bold() > 4)
                         {
                           Properties = setProperty(tnControl.AOTgetProperties(), ' Bold', 'Normal');
                            tnControl.AOTsetProperties(Properties);
                         }
                         break;
 
                }
                tnControl.AOTcompile();
                tnControl.AOTsave();
                tnControl.AOTrefresh();
                curControl++;
            }
        }
    }
    ;
 
    reportCnt       = 1;
 
    reportMap       = new Map(Types::Integer, Types::Class);
 
    pn              = infolog.projectRootNode().AOTfindChild("shared"); 
    pn              = pn.AOTfindChild("MyPriject"); //собсвенно сам проект
    pnChild         = pn.loadForInspection(); // Загружаем объекты
 
    tnIterator      = pnChild.AOTiterator(); // Итератор
    tn              = tnIterator.next();
 

    while(tn)
    {
        if(tn.applObjectType() == UtilElementType::Report) // Т.к. в проекте Job который 
                                                                                  //выполняет изменения с 
                                                                                  //отчетами, то здесь мы определяем тип объекта
        {
            // что бы понять что за объект и увидеть его св-ва, я создаю его в памяти
            args        = new Args(tn.treeNodeName());
            tnReport    = tn.AOTfirstChild();
 
            reportMap.insert(reportCnt, tnReport);
 
            while(tnReport)
            {
                    
                    if(tnReport.treeNodeName() == 'Designs')
                {
                    tnDesign    = tnReport.AOTfirstChild();
                    tnDesignIt  = tnDesign.AOTiterator();
 
                    args.designName(tnDesign.treeNodeName());
                    rRun    = new ReportRun(args);
 
                    report  = rRun.report();
                    rDesign = report.design(tnDesign.treeNodeName());
 
                    while(tnDesign)
                    {
                        // Т.к. отчеты содержат не по одному дизайну, то надо модифицировать все
                        if(!tnDesign.AOTObjectNode() && tnDesign.treeNodeName() == 'Generated Design')
                        {
                            sectionCnt      = 1;
                            mainSectionCnt  = 1;
                            sectionQty      = rDesign.sectionCount();
                            tnSection       = tnDesign.AOTfirstChild();
 
                            SectionMap      = new Map(Types::Integer, Types::Class);
                            SubSectionMap   = new Map(Types::Integer, Types::Class);
 
                            while(tnSection)
                            {
                                if(!SubSection)
                                    SectionMap.insert(sectionCnt, tnSection);
                                else
                                    SubSectionMap.insert(sectionCnt, tnSection);
 
                                name        = tnSection.AOTname();
                                rSection    = rDesign.sectionName(name);
 
                                if(rSection)
                                {
                                    editControl(rSection, rSection.controlCount());
                                    if(tnSection.AOTnextSibling())
                                        tnSection = tnSection.AOTnextSibling();
                                    else
                                    {
                                        tnSection = tnSection.AOTfirstChild();
 
                                        while(tnSection && !rDesign.sectionName(tnSection.AOTname()))
                                        {
                                            tnSection = tnSection.AOTnextSibling();
                                            name      = tnSection ? tnSection.AOTname() : "";
 
                                            if(tnSection && tnSection.AOTfirstChild())
                                            {
                                                tnSection = tnSection.AOTfirstChild();
                                                break;
                                            }
                                        }
                                        subSection = !tnSection ? false : true;
                                    }
                                }
                                else
                                {
                                    tnSection  = tnSection.AOTfirstChild();
                                    subSection = tnSection   ? true : false;
                                }
 
                                if(!tnSection)
                                {
                                    tnSection = SectionMap.lookup(SectionMap.elements());
                                    tnSection = tnSection.AOTnextSibling();
                                }
                                sectionCnt++;
                            }
                        }
                        tnDesign = tnDesignIt.next();
                    }
                }
                tnReport = tnReport.AOTnextSibling();
            }
            tnReport = reportMap.lookup(reportMap.elements()).AOTparent();
            // Собственно здесь и должно происходить сохранение но этого не происходит
            tnReport.AOTcompile(); 
            tnReport.AOTsave();
            tnReport.AOTrefresh();
            //tnReport = null;
            reportCnt++;
        }
        tn = tnIterator.next();
    }
    InfoLog.projectRootNode().AOTsave();
}
Старый 04.06.2010, 14:08   #2  
Минич is offline
Минич
Участник
 
2 / 10 (1) +
Регистрация: 08.02.2010
Адрес: Глубокая провинция
Как я понимаю все свойства установленные в окне свойств становятся значениями по умолчанию! И они меняются из кода только на время пользования объекта!
Старый 04.06.2010, 14:17   #3  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Почему на время пользования объектом? Я же не меняю в используемом объекте св-ва, а инициализирую TreeNode найденным контролом:

X++:
void editControl(ReportSection _reportSection, int _ctrlQty)
    {
        int         curControl = 1;
        TreeNode    tnControl;
        ;
 
        while(curControl <= _ctrlQty)
        {
            rControl    = rSection.controlNo(curControl);
            name        = rControl.treeNodeName();
            [B]tnControl   = rSection.AOTfindChild(rControl.treeNodeName());[/B] // Объект tnControl то новый я его нигде больше не использую, 
//и все изменения должны происходить в AOT
            ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 
        }
    ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Финансовые отчеты - как изменить заголовок столбца? Qaz Qwerty DAX: Программирование 7 09.06.2008 21:24
Как изменить фамилию гл.буха в счет-фактуре? AX 3.0. Подскажите... Бриллиантик DAX: Функционал 5 07.05.2008 11:50
Фин отчеты: может ли работать по нескольким компаниям сразу Arahnid DAX: Функционал 3 30.05.2007 17:46
Обработка накладной – функция изменить дату Sanya DAX: Функционал 2 05.08.2005 12:50
Отчеты по клиентам Anastasiya DAX: Функционал 2 19.03.2005 12:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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