AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 20.02.2007, 09:23   #1  
moid ist offline
moid
Участник
 
84 / 10 (1) +
Registriert seit: 05.02.2007
Номер недели
Какой ф-ей можно получить номер недели текущего месяца?
Alt 20.02.2007, 09:30   #2  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
Zitat:
Zitat von moid Beitrag anzeigen
...номер недели текущего месяца?
Зависит от того, что Вы вкладываете в это понятие:
- можно конкретное число месяца поделить на 7 и округлить в нужную сторону
- а можно вычислить неделю года от конкретного числа месяца и потом из нее вычесть неделю года от первого числа этого месяца

Вы уверены, что Вам нужен именно месяц, а не год?
Alt 20.02.2007, 09:33   #3  
moid ist offline
moid
Участник
 
84 / 10 (1) +
Registriert seit: 05.02.2007
В месяце есть 4 недели мне нужно узнать какая по счету текущая неделя.
Alt 20.02.2007, 09:34   #4  
MikeR ist offline
MikeR
MCT
Benutzerbild von MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1.628 / 627 (24) +++++++
Registriert seit: 28.11.2005
Ort: просто землянин
Когда то писал что то подобное сейчас уже не помню, а посмотри для начала формочку SysDateLookup там прорисовываются на grid недели по определенному году
Alt 20.02.2007, 09:37   #5  
moid ist offline
moid
Участник
 
84 / 10 (1) +
Registriert seit: 05.02.2007
wkofyr - вот эта если кому пригодится
Alt 20.02.2007, 09:42   #6  
fialka ist offline
fialka
Участник
 
347 / 16 (1) ++
Registriert seit: 05.10.2006
Ort: Екатеринбург
Zitat:
Zitat von moid Beitrag anzeigen
Какой ф-ей можно получить номер недели текущего месяца?
так спрашивал же номер недели, а эта функция для определения номера недели с начала года...
Alt 20.02.2007, 09:43   #7  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
Zitat:
Zitat von moid Beitrag anzeigen
wkofyr - вот эта если кому пригодится
Ну, ёлка-палка... Она же возвращает номер недели в году! Т.е. от 1 до 52 (53).

Странно, вроде мы по-русски изъяснялись...
Alt 20.02.2007, 09:56   #8  
moid ist offline
moid
Участник
 
84 / 10 (1) +
Registriert seit: 05.02.2007
Ну...
Вот по русски если чё :

WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ;
И получиться, то что надо...
Alt 20.02.2007, 10:08   #9  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
Zitat:
Zitat von moid Beitrag anzeigen
WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ;
И получиться, то что надо...
И чо? Сёдня типа 2-я неделя месяца? Круто! Йо!
X++:
static void Job11(Args _args)
{
    ;
    info( int2str( (wkofyr(20\02\2007) - mthofyr(20\02\2007)*4) + 1 ) );
}
Результат: 2.
Результат: 1.
Alt 20.02.2007, 10:12   #10  
Zabr ist offline
Zabr
Участник
Axapta Retail User
 
1.202 / 345 (14) ++++++
Registriert seit: 26.06.2002
Ort: Москва
В Аксапте используются ISO Week numbers:

Under the ISO standard, a week always begins on a Monday, and ends on a Sunday. The first week of a year is that week which contains the first Thursday of the year, or, equivalently, contains Jan-4.

While this provides some standardization, it can lead to unexpected results -- namely that the first few days of a year may not be in week 1 at all. Instead, they will be in week 52 of the preceding year! For example, the year 2000 began on Saturday. Under the ISO standard, weeks always begin on a Monday. In 2000, the first Thursday was Jan-6, so week 1 begins the preceding Monday, or Jan-3. Therefore, the first two days of 2000, Jan-1 and Jan-2, fall into week 52 of 1999.

An ISO week number may be between 1 and 53. Under the ISO standard, week 1 will always have at least 4 days. If 1-Jan falls on a Friday, Saturday, or Sunday, the first few days of the year are defined as being in the last (52nd or 53rd) week of the previous year.

Unlike absolute week numbers, not every year will have a week 53. For example, the year 2000 does not have a week 53. Week 52 begins on Monday, 25-Dec, and ends on Sunday, 31-Dec. But the year 2004 does have a week 53, from Monday, 27-Dec , through Friday, 31-Dec.
Alt 20.02.2007, 10:12   #11  
oip ist offline
oip
Axapta
Лучший по профессии 2014
 
2.564 / 1416 (53) ++++++++
Registriert seit: 28.11.2005
Blog-Einträge: 1
Zitat:
Zitat von moid Beitrag anzeigen
WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ;
И получиться, то что надо...
Да ну? Сегодня какая неделя года? Восьмая. Какой месяц? Второй. 8-2*4 +1 = 1. Сейчас первая неделя февраля?

Zitat:
Zitat von Gustav Beitrag anzeigen
Результат: 2.
1.
Alt 20.02.2007, 10:17   #12  
moid ist offline
moid
Участник
 
84 / 10 (1) +
Registriert seit: 05.02.2007
X++:
WeekOfMonth = (wkofyr(ToDay()) - mthofyr(ToDay())*4) + 1 ;
Результат = 1, а не 2

Или если ввести дату
WeekOfMonth = (wkofyr(28\2\2007) - mthofyr(28\2\2007)*4 + 1) ;
результат = 2

Какие у тебя проблемы не знаю
Alt 20.02.2007, 10:18   #13  
moid ist offline
moid
Участник
 
84 / 10 (1) +
Registriert seit: 05.02.2007
упс... извиняюсь... запутался в датах
Alt 20.02.2007, 10:19   #14  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Айм сорри, но помоему должно быть 3....
Alt 20.02.2007, 10:21   #15  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
То есть сейчас таки первая неделя месяца?
Оригинально. Я бы (если смотреть по Аксаптовскому календарю), сказал что сейчас 4ая неделя месяца, но судя по сообщению о ISO Week numbers - это тоже не верно

А приведите, пожалуйста, пару примеров, какие результаты вы хотите видеть для различных дат.
Alt 20.02.2007, 10:23   #16  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
Zitat:
Zitat von oip Beitrag anzeigen
1.
Ага. Виноват!
Я в джобе опечатался и написал 20\07\2007, а здесь менял от руки today на литерал.
Ну, кстати, еще один тест. 20 июля - тоже явно не 2-я неделя
Alt 20.02.2007, 10:24   #17  
oip ist offline
oip
Axapta
Лучший по профессии 2014
 
2.564 / 1416 (53) ++++++++
Registriert seit: 28.11.2005
Blog-Einträge: 1
Zitat:
Zitat von Gustav Beitrag anzeigen
Ну, кстати, еще один тест.
Да чего тут тестировать, если с первого взгляда видно, что написана ерунда?
Alt 20.02.2007, 10:36   #18  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
А если вот так?
Может и околесица, но вроде результаты совподают с (моими, во всяком случае) ожиданиями

X++:
static void Job17(Args _args)
{
    int         fullWeeks;
    transDate   curDate;
    ;

    curDate = SystemDateGet();
//    curDate = mkDate(02, 04, 2007);
    fullWeeks = (dayOfMth(curDate) - dayOfWk(curDate) - dayOfWk(dateStartMth(curDate))) / 7;
    //full weeks can be negative ;)

    info(strFmt("Номер недели месяца - %1", fullWeeks + 2));
}
Alt 20.02.2007, 10:45   #19  
Gustav ist offline
Gustav
Moderator
Benutzerbild von Gustav
SAP
Лучший по профессии 2009
 
1.858 / 1152 (42) ++++++++
Registriert seit: 24.01.2006
Ort: Санкт-Петербург
Blog-Einträge: 19
Zitat:
Zitat von Gustav Beitrag anzeigen
Зависит от того, что Вы вкладываете в это понятие:
- можно конкретное число месяца поделить на 7 и округлить в нужную сторону
- а можно вычислить неделю года от конкретного числа месяца и потом из нее вычесть неделю года от первого числа этого месяца
Я коллеге сразу предлагал сначала определиться:

X++:
static void Job11(Args _args)
{
    ;
    // ЛИБО
    info( int2str( trunc((dayOfMth(today())-1)/7) + 1 ) );

    // ЛИБО
    info( int2str( wkofyr(today()) - wkofyr(dateStartMth(today())) + 1) );
}

P.S. Дозвольте еще сюда эту темку до кучи прицепить. Может, на что сгодится. Люблю я всякие такие штучки с датами.
Alt 03.12.2009, 16:54   #20  
Bishop ist offline
Bishop
Участник
 
89 / 60 (3) ++++
Registriert seit: 12.08.2004
Ort: Москва
Zitat:
Zitat von Gustav Beitrag anzeigen
Я коллеге сразу предлагал сначала определиться:

X++:
static void Job11(Args _args)
{
    ;
 
    // ЛИБО
    info( int2str( wkofyr(today()) - wkofyr(dateStartMth(today())) + 1) );
}
Некорректно определяет неделю для января/конца декабря (из-за упомянутого выше стандарта ISO Week numbers).
Например, для 11.01.2010 получается -50, для 31.12.2008 = -47...

Вот "самый" правильный вариант:
X++:
// Номер недели месяца
static int wkOfMth(date _date)
{
    return (dayOfMth(_date) + dayOfWk(dateStartMth(_date)) + 5) div 7;
}
Stichworte
дата, функции

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Номер сеанса активного пользователя KiselevSA DAX: Администрирование 3 22.11.2006 14:32
Почему не дает проставлять инв.номер ОС через закупку? Pismarkina DAX: Функционал 5 03.11.2006 15:49
Код аналитики 'Номер партии' отмечен в складских проводках со значением Antidot DAX: Программирование 9 29.07.2005 10:57
Номер накладной поставщика в purchFormLetter.update SNG DAX: Программирование 8 24.03.2004 10:03
Номер партии Biosoft DAX: Функционал 0 01.07.2003 14:07

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 19:37 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.