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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.05.2008, 15:08   #1  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,497 / 1096 (39) ++++++++
Регистрация: 22.07.2003
Адрес: МО
В свое время работники отдела кадров хотели иметь возможность видеть всех именинников в определенном интервале, мы решали проблему с ДР так (может пригодиться идея).

Была создана табличка RO_DateTable с такими полями:
TransDate, Day, Month, Years, Decade, Quartal

на ней:
X++:
public void insert()
{
    ;
    if (this.TransDate)
    {
        this.Day     = dayofmth(this.TransDate);
        this.Month   = mthofyr(this.TransDate);
        this.Years   = year(this.TransDate);
        this.Quartal = (this.Month + 2) div 3;
        this.Decade  = (this.Day + 9) div 10;
        this.Decade  = (this.Decade == 4) ? 3 : this.Decade;
    }

    super();
}
и
X++:
static void FillData()
{
    RO_DateTable    _RO_DateTable;
    TransDate       _TransDate;
    TransDate       _MinDate = systemdateget() - 365*100;
    TransDate       _MaxDate = systemdateget() + 365*100;
    ;
    select firstonly _RO_DateTable order by TransDate desc;

    _MinDate = max(_MinDate,_RO_DateTable.TransDate + 1);

    for (_TransDate = _MinDate; _TransDate <= _MaxDate; _TransDate++)
    {
        _RO_DateTable.TransDate = _TransDate;
        _RO_DateTable.insert();
    }
}
и на россиской форме сотрудников был метод:
X++:
void BirthDayFilter()
{
    Query                       query = new Query(originalQuery);
    QueryBuildDataSource        qBDS;
    QueryBuildRange             qBDR1;
    QueryBuildRange             qBDR2;
    TransDate                   d1 = StartDate.dateValue();
    TransDate                   d2 = EndDate.dateValue();
    TransDate                   d_1;
    TransDate                   d_2;
    str                         range;
    ;
    if (StartDate.dateValue() && EndDate.dateValue())
    {
        qBDS = query.dataSourceTable(tablenum(RO_DateTable));

        if (!qBDS)
        {
            qBDS = query.dataSourceTable(tablenum(EmplTable),2).addDataSource(tablenum(RO_DateTable),"DT");
            qBDS.joinMode(joinMode::InnerJoin);
            qBDS.relations(false);
            qBDS.addLink(fieldnum(EmplTable, BirthDate),fieldnum(RO_DateTable, TransDate));
        }

        qBDR1 = qBDS.findRange(fieldnum(RO_DateTable, Day));
        if (!qBDR1)
        {
            qBDR1 = qBDS.addRange(fieldnum(RO_DateTable, Day));
        }

        range = strfmt("(DT.Day == 99)");
        d_1   = d1;

        while (d_1 <= d2)
        {
            d_2 = dateEndMth(d_1);

            range += strfmt(" || ((DT.Day >= %1) && (DT.Day <= %2) && "+
                            "(DT.Month == %3))",dayofmth(d_1),dayofmth(min(d_2,d2)),mthofyr(d_1));

            d_1 = d_2 + 1;
        }

        qBDR1.value(strfmt("(%1)",range));

        EmplTable_ds.query(query);
    }
    else
    {
        EmplTable_ds.query(originalQuery);
    }

    EmplTable_ds.executeQuery();
}
За это сообщение автора поблагодарили: Antant (1), farlander (1).
Теги
законченный пример, программно, расчеты с персоналом, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
MDX запрос, выборка за период. Вата DAX: Программирование 2 17.10.2008 14:34
Как узнать по объекту RecordSortedList, из какой таблицы в нем записи? gl00mie DAX: Программирование 4 20.02.2008 15:39
Как узнать UserName от кого выполняется метод ? egorych DAX: Программирование 7 18.09.2007 18:46
Через map узнать fieldId Dron AKA andy DAX: Программирование 6 20.02.2004 18:18
Можно ли узнать ширину колонки в Grid? Maxim Gorbunov DAX: Программирование 1 05.07.2002 18:52

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

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

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