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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.02.2008, 16:56   #1  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
? непонятный результат str2date
Ax 3.0 SP4
непонятный результат выдает код:
X++:
static void Job(Args _args)
{;
    info(strFmt("%1", str2date("CL1", 123)));
}
на экран выводится: CL.01.2008
какие будут соображения по этому поводу?
Старый 06.02.2008, 17:20   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
У меня на 5.0.452.0 не воспроизводится.
Видимо, баг. Смешной, но баг.
Видимо уже починили.
Старый 06.02.2008, 17:25   #3  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
DAX 4 SP1 не воспроизводится.
Старый 06.02.2008, 22:56   #4  
vladz is offline
vladz
Участник
 
14 / 14 (1) ++
Регистрация: 26.01.2006
трудно объяснить, но в 3.0 SP5 такой код работает, и видимо, CL в распознается как последний день месяца %)

X++:
static void test_CL(Args _args)
{      
    Date d = str2date("CL-2-2008",123);
    ;
    print date2str(d,123,1,1,3,1,4);
    print dayOfMth( d );
    pause;
}
Старый 07.02.2008, 10:18   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
ax3kr2 - воспроизводится. Интересно, почему с другими буквами не работает. Или это римскими цыфрами?
Старый 07.02.2008, 10:28   #6  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от vladz Посмотреть сообщение
распознается как последний день месяца %)
точно
Старый 07.02.2008, 10:34   #7  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Ну и что, что последний. Или я чего не понял? Почему именно CL, какие есть еще комбинации букв?
Старый 07.02.2008, 10:45   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
мне кажется, это спецзначение.

Ведет себя как последний день месяца, но с ним не сравнивается:
X++:
str2date("29.02.2008", 123)==str2date("CL", 123)
false
str2date("29.02.2008", 123)==str2date("CL", 123)+1-1
true
Старый 07.02.2008, 11:18   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
"OP" себя похоже ведет
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: belugin (1).
Старый 07.02.2008, 11:53   #10  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Угу, и других комбинаций больше нет.

X++:
static void Jobeee(Args _args)
{
    container c = ['a','b','c','d','e','f','j','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
    int       length = conlen (c);
    int       i = 1;
    int       j;
    str       s;
;
    while (i <= length)
    {
        j = 1;
        while (j <= length)
        {
            s = strFmt("%1", str2date(conpeek(c,i)+(conpeek(c,j)), 123));

            if (s)
                info(s);

            j++;
        }
        i++;
    }
}
Старый 07.02.2008, 12:33   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от oip Посмотреть сообщение
Угу, и других комбинаций больше нет.
Есть одна буква d
__________________
полезное на axForum, github, vk, coub.
Старый 07.02.2008, 12:42   #12  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Э?

info(strFmt("%1", str2date("d", 123))); => ' '

И трехбуквенных комбинаций уже нет таких.

X++:
static void Jobeee(Args _args)
{
    container c = ['a','b','c','d','e','f','j','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
    int       length = conlen (c);
    int       i = 1;
    int       j;
    int       k;
    str       s;

    void checkAndInfo (str _s)
    {
        if (s)
            info(s);
    }

;
    while (i <= length)
    {
        j = 1;

        s = strFmt("%1", str2date(conpeek(c,i), 123));

        // Однобуквенные строки
        checkAndInfo (s);

        while (j <= length)
        {
            k = 1;

            s = strFmt("%1", str2date(conpeek(c,i)+conpeek(c,j), 123));

            // Двухбуквенные строки
            checkAndInfo (s);

            while (k <= length)
            {
                s = strFmt("%1", str2date(conpeek(c,i)+conpeek(c,j)+conpeek(c,k), 123));

                // Трехбуквенные строки
                checkAndInfo (s);

                k++;
            }
            j++;
        }
        i++;
    }
}
Старый 07.02.2008, 13:22   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Это не спецсимволы.

Просто, так хитро отображается переполнение даты (точнее дней).
Причем, до 64 дня включительно так и отображается - 64 февраля (или любой другой месяц) . А дальше выводится либо CL, либо OP.

Для четверки это все так же верно, за исключением того, что этот вызов str2date("CL-2-2008",123) возвращает пустую дату (подозреваю, что и в пятерке так же).

А вот небольшой демонстрационнй тестик
X++:
static void Job01Args _args)
{      
    Date d;
    int i;
    ;
    for (i=0;i<=0xff;i++)
    {
        [d] = ContainerClass::blob2Container( BinData::stringToData(strfmt("07036c01%1ff", int2hex(i, 2))) );
        info(strfmt("%1 - %2 - %3", int2hex(i, 2), date2str(d,123,1,1,3,1,4), dayOfMth( d )));
    }
}
А dayOfMth() возвращает максимальный день - 32
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: oip (2).
Старый 07.02.2008, 13:31   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Вынес вот сюда База знаний ERP : Axapta / Tip / date
Старый 07.02.2008, 14:16   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от ice Посмотреть сообщение
на экран выводится: CL.01.2008
Может, это ошметки старой функциональности, связанной с закрывающими периодами?
В Навижине можно записывать выражение для вычисления даты.
Цитата:
Entering Dates and Times. There are many ways to enter a date in Navision Attain. Entering digits and letters are translated in the following ways:
  • TWO DIGITS: specifies the day and automatically adds the month and workdate year.
  • FOUR DIGITS: specifies the day plus month and automatically adds the workdate year.
  • DAY, MONTH AND LAST TWO DIGITS OF A YEAR: specifies the entire six-digit date
  • DAY AND WEEK NO.: specifies the day in a specific week of the year and automatically adds the year. For example Mon252 will give the date of Monday in week 25 of the year 2002.
  • T: specifies today’s date or the computer system date.
  • W: specifies the predefined work date .
  • C AND SIX DIGIT DATE: specifies closing date to indicate that an entry is a closing entry.
Цитата:
The first entry MUST be posted on the last day of the current month and the Recurring Frequency should be either 1D+1M-1D or 1M+CM.
Я не помню такой функциональности, ни в Аксапте, ни в ее предшественнике - в Конкорде.
Но может это рудимент совсем старых версий для указания закрывающего (CLosing) периода? Сейчас для этих целей служат периоды совместно с интервалами дат.
http://axapta.mazzy.ru/lib/ledgerperiodcode/

Цитата:
Сообщение от oip Посмотреть сообщение
Э?

info(strFmt("%1", str2date("d", 123))); => ' '
Т.е. d обрабатывается ядром на уровне GUI?
Хм... Спасибо.
__________________
полезное на axForum, github, vk, coub.
Старый 07.02.2008, 14:31   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Тогда OP - Operation Period?
Вполне возможно.

В любом случае, не думаю, что эта фигня достойна исправления, если это вообще считать багом

P.S. Хотя скорее даже OPening
Старый 07.02.2008, 14:43   #17  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
по документации неправильный формат даты должен возвращать пустую строку. OP не перечислен в форматах даты
Старый 07.02.2008, 14:46   #18  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от kashperuk Посмотреть сообщение
В любом случае, не думаю, что эта фигня достойна исправления, если это вообще считать багом
Я бы это рассматривал как Истер Эгг. Хотя, думаю, "эта фигня" на самом деле им и не является.
Старый 09.02.2008, 10:24   #19  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от oip Посмотреть сообщение
DAX 4 SP1 не воспроизводится.
Цитата:
Сообщение от kashperuk Посмотреть сообщение
У меня на 5.0.452.0 не воспроизводится.
В 4-ке функцию str2date() переписали с использованием регулярных выражений и классов ATL для их разбора - вероятно, в ходе данного процесса и выкинули эти "пасхальные яйца".
Старый 09.02.2008, 12:36   #20  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Job, приведенный AndyD выводит у меня и CL даты, и OP даты.
Но в обратную сторону уже это все не работает.
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Непонятный HintFlag Logger DAX: Программирование 1 12.11.2007 15:47
new behavior of str2Date() in AX 4. gb DAX in English 1 06.09.2007 10:05
Результат обработки закупки на возврат kvg6 DAX: Программирование 6 30.05.2006 16:17
Результат зароса в грид Manner DAX: Программирование 2 20.09.2005 16:20
Товарная накладная - непонятный алгоритм умножения количества на стоимость ATimTim DAX: Функционал 4 11.08.2004 16:59
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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