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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.09.2016, 17:34   #1  
Artikov is offline
Artikov
Участник
 
33 / 12 (1) ++
Регистрация: 06.06.2016
Преобразование даты
Всем добрый день!

Есть такая проблема, что при переноси в ГК отчета даты разноски переносятся некорректно. Я посмотрел код, который писали до меня, и там есть вот такие строчки(переделал под джоб)

X++:
str dateStr;
date    retDate;
real    dateReal;
    
    dateStr = '31.12.2016';
    dateReal = str2num(dateStr);
    retDate = dateNull() + dateReal - 2;
кто-нибудь может объяснить, зачем здесь может быть вот это?
X++:
retDate = dateNull() + dateReal - 2;
потому что я не понимаю, как к дате можно прибавлять и отнимать real.
Старый 09.09.2016, 18:42   #2  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от Artikov Посмотреть сообщение
Всем добрый день!

Есть такая проблема, что при переноси в ГК отчета даты разноски переносятся некорректно. Я посмотрел код, который писали до меня, и там есть вот такие строчки(переделал под джоб)

X++:
str dateStr;
date    retDate;
real    dateReal;
    
    dateStr = '31.12.2016';
    dateReal = str2num(dateStr);
    retDate = dateNull() + dateReal - 2;
кто-нибудь может объяснить, зачем здесь может быть вот это?
X++:
retDate = dateNull() + dateReal - 2;
потому что я не понимаю, как к дате можно прибавлять и отнимать real.
Дату приводят к числу и от числа отнимают количество 2. Наверное нужно два дня отнять. Понятно что тот кто это сделал совсем не программист. Даже не зная AX для любого программиста очевидно что так нельзя делать. Всегда есть специализированные функции для этого.
То есть надо по контексту догадаться что за логика и тупо переписать.
Старый 09.09.2016, 20:49   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Подозреваю, что тот, кто это написал просто не знал, как записать дату в виде константы. Скорее всего, хотели что-то вроде этого

X++:
retDate = 31\12\2016 - 2;
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 10.09.2016, 09:31   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Если вам что-то непонятно, лучше напишите небольшой тестовый джобик.
Либо вы будете полчаса думать над кодом, либо за 5 минут закодите ситуацию
X++:
    real    r;
    ;

    r = str2num('31.12.2016');
    info(num2str(r, 0, 4, 1, 1));
    // результат 31.1200
Если при вычитании еще все ок (31.12 - 2 = 29.12), то при сложении у вас уже вылезают явные проблемы. Я уже не говорю про сложение с dateNull (1900\01\01 + 29.12 = 1900\01\30). Округление до целого, затем сложение с датой... Ой-ёй! А где год-то?)))
Если уж хотите превратить дату в число, date2num() вам в помощь. Функция переводит дату в количество дней начиная от 1900 года. Кстати в АХ4, функция вернет 0 для любой даты за 1900 год. В 2012 эта ситуация уже исправлена. Кто может проверить в 2009?
__________________
// no comments
Старый 12.09.2016, 00:12   #5  
Artikov is offline
Artikov
Участник
 
33 / 12 (1) ++
Регистрация: 06.06.2016
Спасибо большое за ответы! Вот я как раз начинающий программист на axapta и меня эта ситуация смутила. Джоб я писал и ситуацию смоделировал, видел, что с датой происходит и вообще. Просто думал, что в этом может быть скрыт какой-то сакраментальный смысл, который от меня ускользает, но вы мои сомнения отбросили
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Контроль даты поставки + Авторезервирование kart DAX: Функционал 0 21.07.2011 11:44
Можно ли в открытых журнала менять даты? velk DAX: Программирование 5 24.01.2005 08:50
Lookup даты для выбора месяца Antidot DAX: Программирование 0 21.01.2005 21:24
Очень не хочеться вручную устанавливать даты для всех строк журнала .... ATimTim DAX: Функционал 1 14.09.2004 19:33
Проверка даты Wamr DAX: Программирование 9 15.12.2002 17:28

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

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

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