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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.07.2008, 01:24   #1  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
:( Вписать динамический отчет в страницу (DAX 4.0)
Есть отчет, который должен печатать access violation records по результатам анализа лога базы данных и таблицы с правами. Есть специальная таблица и форма для работы с этой таблицей, где администратор может определить какие таблицы и какие поля его интересуют в этом отчете. То есть заранее неизвестно сколько будет таблиц и полей выведено в отчет. Администратор не хочет видеть этот отчет в виде вертикальной колбасы, подавай ему табличный вид. Приходится извращаться и создавать массив из таблиц и полей, и печатать этот массив. Вот то и возникает проблема - надо чтобы все поля одной таблицы печатались в одной строчке, отчет масштабировался так, чтобы вписаться в страницу.
А у меня получается какая-то ерунда - не масштабируется отчет и все тут. Уже все свойства подерганы за разные ниточки - не получается. И к тому же работает медленно.
Я не программист, может кто более сведующий подскажет какие нибудь идеи.
А ниже злополучный код fetch, доброжелательные советы будут выслушаны с почтением.

X++:
public boolean fetch()
{
    boolean retCode = false;
    Issi_tmp_accessvioaltion accessviolation, accessviolation1;
    ReportSection reportSection;
    Counter i = 0;
    QueryRun qrun;
    int newtable, oldtable;
    str olduser, newuser;
    str 50 value[], fieldname[];
    int tables[], curtab;
    int numberoffields[], fieldwight[], totalwight[], numoftables = 0, maxfileds = 50, shift, t;
    reporttextcontrol reportcontrol;


    ;
    qrun = new QueryRun(element);

    if (! qrun.prompt())
    {
        return retCode;
    }

    olduser = '';
    oldtable = 0;
    reportcontrol = new reportcontrol();


    ///////////////////discover tables and fields
     numoftables = 0;

     while select accessviolation1 group by table
     {for (i=1;i<=numoftables; i++)
        if (tables[i] == accessviolation1.Table )
            break;
        if (i> numoftables)
           {numoftables++;
           tables[numoftables] = accessviolation1.table;
           }
      }
///////////////////////////////////////////////////////////////////////////
      for (curtab = 1; curtab<= numoftables; curtab++)
      {
            t =maxfileds*(curtab-1);
            fieldname[1+t] = 'Com';
            fieldwight[1+t] = 3;
            fieldname[2+t] = 'Date';
            fieldwight[2+t] = 7;
            fieldname[3+t] = 'Description';
            fieldname[3+t] = 'Type';
            fieldwight[4+t] = 7;

            numberoffields[curtab] = 4;

            while select accessviolation1
                where (accessviolation1.Table == tables[curtab]
                && accessviolation1.fieldid != 0)
            {
                     fieldwight[3+t] = max(strlen(accessviolation1.Description),fieldwight[2+t]);

                     for (i=5; i<=numberoffields[curtab];i++)
                     {
                           if (fieldname[i+t] == accessviolation1.FieldN)
                           break;
                     }
                     if (i >numberoffields[curtab])
                     {
                           numberoffields[curtab]++;
                           fieldname[numberoffields[curtab]+t] = accessviolation1.FieldN;
                           fieldwight[numberoffields[curtab]+t] =strlen(accessviolation1.OldValue) + 4 + strlen(accessviolation1.NewValue);
                           totalwight[curtab] =  totalwight[curtab] + fieldwight[numberoffields[curtab]+t];
                     }
                     totalwight[curtab] = totalwight[curtab] + fieldwight[1+t] + fieldwight[2+t] + fieldwight[3+t] + fieldwight[4+t];

                                   // there are description, date and type for each record
           } // while select accessviolation1

    }// for (curtab = 1; curtab<= numoftables; curtab++)


   while (qrun.next())
    {
            accessviolation = qrun.get(TableNum(Issi_tmp_accessvioaltion));

            this.send(accessviolation);
            newtable = accessviolation.Table;
            newuser = accessviolation.Username;

            for (i=1;i<=numoftables; i++)
                if (tables[i] == accessviolation.Table )
                break;
            curtab = i;
            t =maxfileds*(curtab-1);
            shift = 0;

            /////////////// print headers//////////////////////////////////////

            if (newuser != olduser) // new user and new table
            {
                    this.execute(1);
                    this.execute(2);
                    olduser = newuser;
                    oldtable = 0;
            }
            else if (newtable != oldtable)
            {
                    this.execute(2);
                    oldtable = 0;
            }

            if (newtable != oldtable) //new table
            {
                     oldtable = newtable;
                     for (i=1; i<=numoftables;i++)
                        if (tables[i] == newtable) break;

                     reportSection = element.design().autoDesignSpecs().addProgrammableSection(4);
                     reportsection.columnsMode(2);
                     reportsection.arrangeMethod(0);

                     // print fields headers

                     for(i=1; i<=numberoffields[curtab]; i++)
                     {
                            reportSection.addTextControl(fieldname[i+t]);
                            reportcontrol = reportsection.controlNo(i);
                            reportcontrol.lineRight(1);
                            reportcontrol.lineBelow(1);
                            reportcontrol.widthMode(-1);
                            reportcontrol.width(fieldwight[i+t]*3,Units::pt);
                            reportcontrol.fontSize(7);
                     }
                     reportSection.executeSection();
             }// if

            /////////////////////////end print headers //////////////////////////////////////

            /////////////////////////print that was changed /////////////////////////////////

            // define 4 first fields
                value[0] = '';
                
                value[1] = accessviolation.LogDataAreaID;
                value[2] = date2str(accessviolation.tdate, 213, 2,2,2,0,0);
                value[3] = accessviolation.Description;
                value[4] = enum2str(accessviolation.LogType);

                if (accessviolation.LogType == databaselogtype::Update)
                    {
                      while select accessviolation1 where
                                        accessviolation1.LogRecID == accessviolation.LogRecID
                                        && accessviolation1.TRecID == accessviolation.TRecID
                                        && accessviolation1.LogType == databaselogtype::Update
                                        && accessviolation1.fieldid != 0
                        {
                            for (i=5; i<=numberoffields[curtab];i++)
                                             if (fieldname[i+t] == accessviolation1.FieldN)  break;
                            value[i] =accessviolation1.OldValue + ' -> ' + accessviolation1.NewValue;
                            shift ++;
                        }//WHILE

                        // move cursor
                        for (i=1; i < shift; i+=1)
                        {  qrun.next();
                        }
                } //if

                // print field's new value
                reportSection = element.design().autoDesignSpecs().addProgrammableSection(7);//this.design().Sectionname('ProgrammableSection_5');
                reportsection.columnsMode(2);
                reportsection.arrangeMethod(0);

                for(i=1; i<=numberoffields[curtab]; i++)
                  {
                          reportSection.addTextControl(value[i]);

                          //design
                          reportcontrol = reportsection.controlNo(i);
                          reportcontrol.widthMode(-1);
                          reportcontrol.width(fieldwight[i+t]*3,Units::pt);
                          reportcontrol.lineRight(1);
                          //reportcontrol.rightMarginUnit(units::pt);
                          //reportcontrol.rightMarginValue(3);
                          reportcontrol.fontSize(7);
                  }
                  reportSection.executeSection();

         }// while

    retCode = true;
    element.printJobSettings().fitToPage(true);
    return retCode;

}
Старый 17.07.2008, 02:04   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Проталкивайте идею с выгрузкой отчета этого в Excel - объясните ему, что он еще и возможностями Excel после выгрузки сможет пользоваться для анализа данных этих
Старый 17.07.2008, 05:46   #3  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Аудитор не хочет смотреть Excel Принципиально и железно. А может настройки принтера изменить, как-нибудь печатать это на A3... да еще landscape... Попробую завтра.
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
EP DAX 4.0 отчет с изображением M.Ruslan DAX: Программирование 0 06.11.2008 10:14
dax-lessons: Generate XML Documentation Files for a project - DAX 2009 Blog bot DAX Blogs 0 08.08.2008 19:06
dax-lessons: Active directory in Axapta Blog bot DAX Blogs 0 27.08.2007 23:00
Kashperuk Ivan: AxPaint - make your DAX look cool :) Blog bot DAX Blogs 0 26.06.2007 21:00
Kashperuk Ivan: (DAX 3.0) SysExportDialog form extension Blog bot DAX Blogs 1 15.05.2007 19:16

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

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

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