AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.03.2007, 16:27   #1  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Мне еще нравится подобная практика использования комментариев:
X++:
info('@NEO258'); //DocuView
__________________
_databaseTransDelete ... bl@$ !
Старый 07.03.2007, 16:27   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от DTD Посмотреть сообщение
Надо было labels сразу использовать, не пришлось бы менять )
Обижаете. Естественно, что использовали labels, но сначала сделали их только для языка en-us.
Старый 07.03.2007, 16:33   #3  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от EVGL Посмотреть сообщение
Обижаете. Естественно, что использовали labels, но сначала сделали их только для языка en-us.
Если речь o vendors, inventory .. то это стандартные labels, в en-gb они соответственно suppliers, stock ..
__________________
_databaseTransDelete ... bl@$ !
За это сообщение автора поблагодарили: EVGL (-1).
Старый 06.03.2007, 17:53   #4  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Post
Я постарался улучшить код, избавив его от указанных недостатков.
X++:
static container now()
{
    #define.KernelDLL('KERNEL32')
    #define.SizeOfStructure(8*4)

    Binary      systemtime = new Binary(#SizeOfStructure);
    DLL         _DLL          = new DLL(#KernelDLL);
    DLLFunction _GetSystemTime = new DLLFunction(_DLL, 'GetLocalTime');

    int         wYear;
    int         wMonth;
    int         wDayOfWeek;
    int         wDay;
    int         wHour;
    int         wMinute;
    int         wSecond;
    int         wMilliseconds;

    date        resDate;
    TimeOfDay   resTime;


    _GetSystemTime.arg(ExtTypes::Pointer);

    _GetSystemTime.call(systemtime);

    wYear   = systemtime.word(0);
    wMonth  = systemtime.word(2);
    wDay    = systemtime.word(6);

    resDate = mkdate(wDay, wMonth, wYear);

    wHour   = systemtime.word(8);
    wMinute = systemtime.word(10);
    wSecond = systemtime.word(12);

    resTime = wSecond + (wMinute + wHour*60)*60;

    info(strFmt("%1 %2", resDate, time2str(resTime, -1, -1)));

    return [resDate, resTime];
}
К сожалению, он возвращает время Coordinated Universal Time (UTC), т.е. для Гринвичского меридиана. Буду рад, если кто-нибудь продолжит работу и скорректирует код с учетом временной зоны.

P.S. Исправил: надо было успользовать функцию GetLocalTime вместо GetSystemTime.

Как нетрудно видеть, код в итоге стал не менее компактным, зато более доступным и понятным.

Последний раз редактировалось EVGL; 06.03.2007 в 18:03.
Старый 07.03.2007, 14:11   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Может когда время = полночь минус 1 минута, запускать sleep на 2 минуты?
А уже на второй минуте след. дня начинать то, чего там планировалось

Последний раз редактировалось kashperuk; 07.03.2007 в 14:32. Причина: упс. очепятка
Старый 07.03.2007, 14:44   #6  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Да... программистский подход был у автора.

Я бы запомнил дату до и после запроса времени, если бы они отличались, то вывел бы полночь для второй даты, а если нет, то время и вторую дату.

Вообще по БестПрактису код лучше писать наглядно (ну типа он без комментариев д.б. понятен).

С очень высокой вероятностью если автору показать этот кусок кода через год после его написания и без предварительной подготовки (т.е. внезапно), он далеко не сразу сообразит, чего он им хотел добиться.
__________________
С уважением,
glibs®
Старый 07.03.2007, 15:05   #7  
ziva is offline
ziva
Иван Захаров
Злыдни
Лучший по профессии AXAWARD 2013
 
65 / 106 (4) +++++
Регистрация: 25.03.2005
Цитата:
Сообщение от glibs Посмотреть сообщение
С очень высокой вероятностью если автору показать этот кусок кода через год после его написания и без предварительной подготовки (т.е. внезапно), он далеко не сразу сообразит, чего он им хотел добиться.
А на этот случай перед методом имеются комментарии:

// Получение текущей даты и времени с проверкой
// на случай, что между вызовами today() и timenow() наступит новый день

Их я опустил намеренно - чтобы всеобщий разум пошевелил извилинами. Вон EVGL "выдал" совершенно понятный код.
Старый 07.03.2007, 15:52   #8  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от ziva
...
А на этот случай перед методом имеются комментарии:
...
"...
Вообще по БестПрактису код лучше писать наглядно (ну типа он без комментариев д.б. понятен).
..."

Для тех, кто перед праздником утратил бдительность, обращаю внимание, что я не против комментариев, а наоборот — за их использование. Но одно второму не мешает, и друг друга не исключает.
__________________
С уважением,
glibs®
Старый 07.03.2007, 15:09   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
лично мне исходный вариант нравится больше всего. По-моему всё понятно.
Старый 07.03.2007, 16:13   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
любой вариант постребует комментариев на тему "зачем". Хотя мне и так было, в-общем, понятно. Достаточно просто задать себе вопрос при каких условиях условие в вайле будет тру.
Старый 19.04.2007, 16:47   #11  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Как сделать 4 ошибки в слове "еще"?
Из Reports\JmgAbsenceColumn\fetch в 3.0:

X++:
while select sum(seconds) from jmgStampTrans
 group by JobIDAbs
 where jmgStampTrans.emplId    == _jmgEmployee.emplId                    &&
          jmgStampTrans.startDate >= jmgReport_AbsenceColumn.parmDateFrom() &&
          jmgStampTrans.startDate <= jmgReport_AbsenceColumn.parmDateTo()   &&
          jmgStampTrans.stampType == JmgStampTypeEnum::Absence
{
   wrkIndex = str2Int(jmgStampTrans.jobIdAbs);
   if (! wrkIndex)
      wrkIndex = str2Int(jmgStampTrans.jobId);
   if ((wrkIndex) && (arrayIndex[wrkIndex]))
      sumSeconds[arrayIndex[wrkIndex]] += jmgStampTrans.seconds;
}
Обратите внимание на str2Int(jmgStampTrans.jobId). Найдите 2 ошибки
Старый 28.04.2007, 13:36   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от EVGL Посмотреть сообщение
Из Reports\JmgAbsenceColumn\fetch в 3.0:

X++:
while select sum(seconds) from jmgStampTrans
 group by JobIDAbs
 where jmgStampTrans.emplId    == _jmgEmployee.emplId                    &&
          jmgStampTrans.startDate >= jmgReport_AbsenceColumn.parmDateFrom() &&
          jmgStampTrans.startDate <= jmgReport_AbsenceColumn.parmDateTo()   &&
          jmgStampTrans.stampType == JmgStampTypeEnum::Absence
{
   wrkIndex = str2Int(jmgStampTrans.jobIdAbs);
   if (! wrkIndex)
      wrkIndex = str2Int(jmgStampTrans.jobId);
   if ((wrkIndex) && (arrayIndex[wrkIndex]))
      sumSeconds[arrayIndex[wrkIndex]] += jmgStampTrans.seconds;
}
Обратите внимание на str2Int(jmgStampTrans.jobId). Найдите 2 ошибки
Евгений.
Первая ошибка - простая. Не выбирается JobId
А в чем вторая ошибка-то?

Я же так понимаю ошибка должна быть именно в этой строке?
И это ведь не вызов str2Int без проверки, что это таки число? И не длина строки? И не номерная серия?
Просвети

Последний раз редактировалось kashperuk; 28.04.2007 в 13:43.
Старый 28.04.2007, 13:09   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
X++:
void loadParam(container _param = conNull())
{
    int i;
    if (conLen(_param) > 0)
    {
        param = conNull();
        for (i = 1; i <= conlen(_param); i++)
        {
            param = conIns(param, i, conPeek(_param, i));
        }
    }
}
За это сообщение автора поблагодарили: kashperuk (1).
Старый 28.04.2007, 13:14   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Прикольная тема.
И особо мне нравится, как мне приходят уведомления о новых сообщениях в ней на почту.

Название темы там отображается не так "The Daily Axapta WTF"
а так
Миниатюры
Нажмите на изображение для увеличения
Название: WTF.PNG
Просмотров: 788
Размер:	2.4 Кб
ID:	2597  
Старый 28.04.2007, 21:01   #15  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Вторая ошибка: JobId типа ProdJobId - это строка с обычной номерной серией, у которой вполне может быть буквенный префикс или суффикс, а они преобразуют его в индекс массива.

А в примере Белугина программист, похоже, был уверен, что контейнеры передаются по ссылке. Тяжелый случай.
Старый 29.04.2007, 00:25   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от EVGL Посмотреть сообщение
Вторая ошибка: JobId типа ProdJobId - это строка с обычной номерной серией, у которой вполне может быть буквенный префикс или суффикс, а они преобразуют его в индекс массива.

А в примере Белугина программист, похоже, был уверен, что контейнеры передаются по ссылке. Тяжелый случай.
JmgJobId - EDT для этого поля в 3ке. И на него не настроена номерная серия.

PS В четверке, кстати, у меня тоже так. Только что проверил.

Последний раз редактировалось kashperuk; 29.04.2007 в 02:20.
Старый 29.04.2007, 18:50   #17  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
JobId генерируется в трех местах: в производстве, проектах или в самом управлении цехом. Если JobId пришел из производства, то там стоит своя номерная серия.
Старый 17.05.2007, 17:05   #18  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Comment On Classics Week: Chocolate Covered SQL
Много занимаясь решениями для упаковочной отрасли, не мог пройти мимо этого:



Прочитайте внимательно состав продукта.

(c) http://worsethanfailure.com/Articles...ered-SQL-.aspx
За это сообщение автора поблагодарили: e@gle (1), a33ik (1).
Старый 05.06.2007, 10:22   #19  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вчера наткнулся в методе Classes\InventAdjustPost\updateTotal на очень удививший меня код.

X++:
protected  void updateTotal()
{
    InventSettlement        inventSettlement;
    InventTrans             inventTrans;
    ProjLedger              projLedger;

    while select forcePlaceHolders forceSelectOrder sum(costAmountadjustment) from inventSettlement
        index hint DateVoucherIdx
        group by itemId,balanceSheetPosting,balanceSheetAccount,operationsPosting,operationsAccount,dimension
        where inventSettlement.transDate              == transDate    &&
              inventSettlement.voucher                == voucher      &&
              inventSettlement.costAmountAdjustment   != 0            &&
              inventSettlement.InventTransCurrency_RU == inventTransCurrency &&
              inventSettlement.posted                 == NoYes::No
    join inventTrans
        index hint recId
        group projId,projAdjustRefId,inventTransId
        where inventTrans.RecId == inventSettlement.TransRecId
    {
        if (correspondenceEnable)
        {
            this.updateMap_RU(inventSettlement,inventTrans);
        }
        else
        {
            projLedger = this.newProjLedger_RU(inventTrans.ProjId,
                                               inventTrans.InventTransId,
                                               inventTrans.ProjAdjustRefId);
            this.updateTrans(inventSettlement, ledgerVoucher,projLedger);
        }
    }
    this.updateTrans_RU();
}
Обратите внимание на группировку в join запросе по inventTrans - там используется group, но нету by

Это вообще нормально??
Старый 06.06.2007, 10:13   #20  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
В продолжнение темы, приведу вырезку из DevGuide.
Оказывается, это задокументированная фича, и помимо group работает и для order

Цитата:
ORDER_GROUP ::= order OPT_BY
ORDER_GROUP ::= group OPT_BY

OPT_BY ::= by
OPT_BY ::=
Для меня, во всяком случае, это было что-то новое.
За это сообщение автора поблагодарили: mazzy (5), belugin (3).
Теги
axapta, cil, d365fo, guid, rasset, uuid, uuidv7, баг

 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:02.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.