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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.08.2008, 09:55   #1  
CDan is offline
CDan
Участник
 
23 / 10 (1) +
Регистрация: 17.11.2005
Получить значения контролов в ExecuteSection?
Доброго времени суток, уважаемые коллеги.

В ExecuteSection отчетов можно напрямую получать значения string-полей: ReportStringControl.eval().
Возможно ли нечто подобное для полей других типов (enum, real...)?
Axapta 3.0 SP 3.
Старый 19.08.2008, 10:56   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Да, что-то не видно ничего похожего у других типов контролов... А если просто читать значения из поля, которое прописано в DataField, или из метода, который прописан в DataMethod ? Да, получатся повторные вызовы для одной записи. Но если не критично по скорости и объемам данных, то вполне можно. Я сам так делал параллельный слив в Excel.
Старый 19.08.2008, 10:59   #3  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Я написал что-то типа
X++:
ReportIntegerControl intCtrl;

switch(this.controlNo(i).controlType())
{
case ReportFieldType::String:
  eval
 break;
case ReportFieldType::Integer:   
 intCtrl = this.controlNo(i);
 value = SalesLine(  ).(intCtrl.dataField());
 break;
}
Ну а для тех контролов, которые имеют источником данных - метод, соотв, нужно проверять dataMathod, и если он непустой - вместо того, чтобы лезть в таблицу, вызвать этот метод.

P.S. Кстати, у меня тут есть маленький кусочек кода, который позволяет просто путём тупой его вставки в executesection любого отчета, получить аккуратную разграфленную таблицу, даже если в секции есть контролы переменной высоты. Никак руки не доходят причесать и выложить, а то метод, описанный на форуме мало того, что требует редактирования под каждый отчет, так еще и не до конца решает проблему.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 19.08.2008 в 11:03.
Старый 19.08.2008, 11:12   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Maximin Посмотреть сообщение
P.S. Кстати, у меня тут есть маленький кусочек кода, который позволяет просто путём тупой его вставки в executesection любого отчета, получить аккуратную разграфленную таблицу, даже если в секции есть контролы переменной высоты. Никак руки не доходят причесать и выложить...
Хотим, хотим! В любом виде! Здесь и причешем
Цитата:
Сообщение от Maximin Посмотреть сообщение
...а то метод, описанный на форуме мало того, что требует редактирования под каждый отчет, так еще и не до конца решает проблему.
Где это описание, если не секрет? Что за тема?
Старый 19.08.2008, 12:57   #5  
CDan is offline
CDan
Участник
 
23 / 10 (1) +
Регистрация: 17.11.2005
Цитата:
Сообщение от Gustav Посмотреть сообщение
Да, что-то не видно ничего похожего у других типов контролов... А если просто читать значения из поля, которое прописано в DataField, или из метода, который прописан в DataMethod ? Да, получатся повторные вызовы для одной записи. Но если не критично по скорости и объемам данных, то вполне можно. Я сам так делал параллельный слив в Excel.
Сейчас задачка как раз слив в Excel данных из существующего Axapta-отчета.
Была задумка создать класс с возможностью вызова его метода из ExecuteSection a la class.send2excel(this).
Похоже, настолько универсального решения не существует - для получения значений полей/методов таблицы нужно передавать в класс как минимум саму таблицу, а в пределах одной секции теоретически могут выводиться данные из нескольких ds.
Старый 19.08.2008, 13:27   #6  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
А если посомтреть в сторону ReportViewer, PDFViewer и classFactory.getViewer?
Старый 19.08.2008, 15:01   #7  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
добавлю свои пять копеек
кусок кода из класса печати этикеток, преобразует репорт дизайн в EPL для печати напрямую этикеточный принтер
X++:
void addSection(ReportSection _reportSection, common _cursor)
{
    ReportControl        reportControl;
    ReportStringControl  reportStringControl;
    SysDictClass         classObj = new SysDictClass(classnum(ReportSection));//
    int                  childNodesCount;
    int                  i;
    ;

    childNodesCount = _reportSection.AOTchildNodeCount();

    txt += "\nN\n";

    for(i = 0; i < childNodesCount; i++)
    {
        reportControl = _reportSection.controlNo(i);

        if (! reportControl)
            continue;

        if (reportControl.controlType() == ReportFieldType::String)
        {
            reportStringControl = reportControl;
            if (reportStringControl.font() == "BC C128 Medium")
            {
                txt += "B" + this.position(reportControl.left100mm()/12, reportControl.top100mm()/12);

                this.addBarCode(reportControl, _reportSection, _cursor, classObj);
                txt += "\n";
                continue;
            }
        }

        txt += "A" + this.position(reportControl.left100mm()/12, reportControl.top100mm()/12);
        switch (reportControl.controlType())
        {
            case ReportFieldType::Text:
                this.addText(reportControl, _reportSection, _cursor, classObj);
                break;
            case ReportFieldType::String:
                this.addString(reportControl, _reportSection, _cursor, classObj);
                break;
            case ReportFieldType::Integer:
                this.addInteger(reportControl, _reportSection, _cursor, classObj);
                break;
            case ReportFieldType::Real:
                this.addReal(reportControl, _reportSection, _cursor, classObj);
                break;
        }

        txt += "\n";
    }

    txt += "P1\n";
X++:
void addString(ReportControl _reportControl, ReportSection _reportSection, common _cursor, SysDictClass _classObj)
{
    ReportStringControl  reportControl = _reportControl;
    str                  s;
    ;


    txt += this.font(reportControl.fontSize(), reportControl.bold(),
                     reportControl.italic(),  reportControl.font());


    if (reportControl.dataField())
    {
        s = _cursor.(reportControl.dataField());
    }
    if (reportControl.dataMethod())
    {
        s = _classObj.callObject(reportControl.dataMethod(), _reportSection);
    }

    s = strreplace(s, "\"","'");
    txt += strfmt("\"%1\"", s);
}

могу весь класс выложить если кому интересно
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Теги
контрол, отчет

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить периодические значения pyramid DAX: Программирование 11 20.11.2008 16:19
Как получить значения полей (modifiedDate, modifiedTime, modifiedBy и др.) при работе с объектами AOT типа Map? LRA DAX: База знаний и проекты 15 02.04.2007 13:37
Как получить значения поля из lookup метода в WEB Dronas DAX: Программирование 5 13.01.2005 10:17
Значения параметров из SysQueryForm. har DAX: Программирование 19 29.10.2004 15:25
Свойтва контролов в потомках RunBaseBatch slava DAX: Программирование 1 02.05.2002 09:00
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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