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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.11.2013, 15:33   #1  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Классные программисты MS Бразилии создали сей шедевр
Разбираясь с чудесной работой элемента бразильского слоя был обнаружен сей код, который не нуждается, по моему, в комментариях. Код достаточно свеженький.
X++:
//<MSBS user="jjuni" woritem="Layout Danf" date="05/10/2012">
    maskPhone = strreplace(eFiscalDocument.recipientPhone(), "-", "");
    maskPhone = strreplace(eFiscalDocument.recipientPhone(), "(", "");
    maskPhone = strreplace(eFiscalDocument.recipientPhone(), ")", "");
    maskPhone = strreplace(eFiscalDocument.recipientPhone(), " ", "");

    qtdChar = strlen(maskPhone);

    switch(qtdChar)
    {
        case 10:
        case 11:
            maskPhone = "(" + substr(maskPhone, 1, 2) + ") " + substr(maskPhone, 3, 4) + "-" + substr(maskPhone, 7, 4);
        break;
        case 8:
            maskPhone = substr(maskPhone, 1, 4) + "-" + substr(maskPhone, 5, 4);
        break;
        default:
            maskPhone = eFiscalDocument.recipientPhone();
        break;
    }

    return maskPhone;
    //</MSBS>


С уважением, Дмитрий.
Старый 26.11.2013, 16:15   #2  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP

У нас подобным образом программист один писал, вспомнилось сразу.
Старый 26.11.2013, 22:31   #3  
Aron is offline
Aron
Участник
 
2 / 11 (1) +
Регистрация: 13.05.2013
- Как быстро Вы пишите код?
- Очень быстро, со скоростью 1000 строк в час... (правда обычно фигня какая-то получается)
Старый 27.11.2013, 10:55   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Честно говоря, не понял в чем "прикол". Именно данный фрагмент "сам по себе" вполне корректно написан. Если Вас смущает, что сначала некие служебные символы удаляются, а потом они же вставляются, так ведь не известно, где именно эти символы стояли в исходной строке.

Другой вопрос, как этот фрагмент используется. Есть ли необходимость приведения к определенному формату для решения поставленной задачи. Но по данному фрагменту сказать этого нельзя.

Ну, а то, что вместо набора команд strreplace() можно было написать одну команду strRem(), так это дело вкуса
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 27.11.2013, 11:15   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Владимир, а разве не смешно, что они каждый раз берут исходную строку eFiscalDocument.recipientPhone() вместо результата предыдущей обработки?
То есть выполнится только удаление пробелов.
copy-paste рулит
За это сообщение автора поблагодарили: Владимир Максимов (2).
Старый 27.11.2013, 11:22   #6  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Честно говоря, не понял в чем "прикол". Именно данный фрагмент "сам по себе" вполне корректно написан.
maskPhone = strreplace(eFiscalDocument.recipientPhone(), "-", "");
maskPhone = strreplace(eFiscalDocument.recipientPhone(), "(", "");
maskPhone = strreplace(eFiscalDocument.recipientPhone(), ")", "");
maskPhone = strreplace(eFiscalDocument.recipientPhone(), " ", "");

Вроде как первые три строчки можно смело убрать и это ни как не скажется на конечный результат
Старый 27.11.2013, 12:45   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А если бы автор сего чуда удалял бы символы функцией strrem, то её не пришлось бы вызывать четыре раза и не случился бы тогда такой epic fail.
X++:
maskPhone = strrem(eFiscalDocument.recipientPhone(), "-() ");
За это сообщение автора поблагодарили: mazzy (5).
Старый 27.11.2013, 17:38   #8  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Если бы я делал ревью то к такому коду бы даже бы и не придирался.
Код понятный и по делу. Может захотелось в дебаггере видеть в целях тестирования каждую операцию. То есть как бы стиль больше а не нонсенс.

А плакать мне хочется так часто над кодом что у меня уже атрофировалось чувство прекрасного. Счастливые вы А по мне уже лишь бы работало правильно а то все больше новых программистов даже не знают о существовании Best Practices и колбасят как им вздумается а потом стабильно раз в неделю клиент просит фиксить данные на живой базе потому как транзакционная логика через одно место.
Накипело Сижу вот и думаю охватывает ли моя страховка такие беды если вдруг что
За это сообщение автора поблагодарили: mazzy (2).
Старый 27.11.2013, 18:17   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Wamr Посмотреть сообщение
Владимир, а разве не смешно, что они каждый раз берут исходную строку eFiscalDocument.recipientPhone() вместо результата предыдущей обработки?
То есть выполнится только удаление пробелов.
copy-paste рулит
Не видя реализации recepientPhone() и декларации maskPhone нельзя сказать это наверняка
За это сообщение автора поблагодарили: ivas (1).
Старый 27.11.2013, 18:26   #10  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Вопрос, значит, стоит в том, насколько глубоко программисты знают все существующие функции(ну или BP, кому как угодно). Напомнило, как учитель физики в академии рассказал пример, как один профессор известного университета набирал к себе консультантов. После долгой фильтрации кандидаты были найдены, и всем им сообщалось, что на последнем тестировании(собеседовании) будет задан один не сложный вопрос. Кто будет выше всех окажется на рабочем месте. Естественно, все готовились к какому-то подвоху, изучали дополнительные книги, работы профессора, некоторые, даже его биографию. А Вопрос был такой : Сколько вы знаете констант? Естественно, тот кандидат, который назвал их наибольшее количество, с наибольшей правильной точностью, победил. Объяснял он это тем : Я не хочу тратить мое время на время, пока мой консультант будет ползать за этой информацией в справочник.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Последний раз редактировалось Pustik; 27.11.2013 в 18:39.
Старый 27.11.2013, 19:16   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от DmitryK Посмотреть сообщение
элемента бразильского слоя был обнаружен сей код, который не нуждается, по моему, в комментариях. Код достаточно свеженький.
.
Кстати, мне сомнительно, что это свежий production code Microsoft: использование нестандартных тегов, наличие ошибок bp:
- текстовые константы в двойных кавычках
- числовые константы литералами

По идее это должно отсеяться автоматически.

Может, это партнерское решение из Бразилии?
Старый 27.11.2013, 21:08   #12  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от Pustik Посмотреть сообщение
Вопрос, значит, стоит в том, насколько глубоко программисты знают все существующие функции(ну или BP, кому как угодно). ..... за этой информацией в справочник.
Ну знание функций и понимание принципов что куда как и почему для меня сильно разное. Я ни одно интервью на знание функций не пройду Почти ничего не держу в памяти кроме понимания того как искать и где. Ищу быстрее чем думаю и это дает меньшее напряжение в работе.

До сих пор вспоминаю как в одной шотландской компании с секундомером консультанты меня тестировали/интервьюировали с выводом на большой экран моего монитора. Претензия была в том почему я по памяти весь код не печатаю а зачем куда то лезу ищу готовый код. Типа не знаю как кодить. А я даже и не знал что неправильно делаю, хорошо что знающие люди подсказали

Ну неправильно AX как печатную машинку использовать. Просто в корне неверно.
Тише едешь - дольше думаешь. А думать во все стороны одновременно крайне полезно в AX.

Оттого часто и код не самый лучший так как мало кто не из русских программистов страдает перфекционизмом и главное просто код побыстрее заколбасить и забыть
Причем 90% даже не поймет что не так в коде если код работает. Раз работает то и все, зачем париться и занудствовать - красивое письмо менеджеру гораздо важнее кода который никто кроме твоего брата программиста не увидит, а тот просто покривится, поморщится но ничего не скажет потому как безполезно.

"Классный программист" тот кто лучше "программирует" то есть тот от кого меньше слышно жалоб и проблем и который делает много и во время. Качество кода и дизайн решений не играет роли. Некому и некогда оценивать.
За это сообщение автора поблагодарили: ta_and (1).
Старый 27.11.2013, 21:17   #13  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от belugin Посмотреть сообщение
Не видя реализации recepientPhone() и декларации maskPhone нельзя сказать это наверняка
Да если recepientPhone() возвращает maskPhone то это гениальный код
Я бы кстати и не удивился. Может какой буддист написал. Мир он ведь такой большой и разный.

Похоже что просто недописанный код.
Старый 28.11.2013, 08:50   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Pustik Посмотреть сообщение
Вопрос, значит, стоит в том, насколько глубоко программисты знают все существующие функции(ну или BP, кому как угодно).
Не нужно знать наизусть сигнатуры всех функций, чтобы быть успешным программистом, так же как и не нужно знать значения всех констант чтобы считаться хорошим физиком. Нужно знать о существовании и назначении константыфункции, а конкретный способ её использования всегда можно подсмотреть в справочнике.

Цитата:
Сообщение от ax_mct Посмотреть сообщение
Да если recepientPhone() возвращает maskPhone то это гениальный код
Тогда автор - злой гений, очень злой
Старый 28.11.2013, 09:34   #15  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Я думаю, каждый из нас встречает такой быдолкод.
Не могу не поделиться.
X++:
void MaterialProcess(afcProdmaterial _Material, int lineNo)
{
    RouteJobType         _JType;
    boolean             ppoOkToProcess = true;
    ;

    materialProcessError = false;

    if (_Material.JobType == 'Setup')
                            _JType = str2enum(RouteJobType::Setup,_Material.JobType);
                        else
                           _JType = str2enum(RouteJobType::Process,_Material.JobType);

                try
                {
                    ttsbegin;

                    lineNo += 1;
                    _progress.setCount(lineNo);
                    _progress.setText(_material.RefNoID);

                    _JobId      = this.GetJobNum(_Material.RefNoID,_JType, _Material.OprNum,RouteOprPriority::Primary, _Material.ItemId);

                    if (_Material.LotNum != '')
            _Batch      = this.CheckBatchId(_Material.LotNum, _Material.ItemId,_Material);

        if (_material.TranType == 'OFF-FIN' && _material.SerialNum && _material.PQty > 0)
        {
            if (!ppoProdMatlTrace::findSerialNum(_material.SerialNum).Ply)
            {
                ppoOkToProcess = false;
            }
        }

        if (ppoOkToProcess)
        {
                    if(this.PostMaterial(_Material))
                    {
                        _Material.inventDimId   = _dimId;
                        _Material.ProcessedFlag = NoYes::Yes;
                        _Material.update();
                    }
                    else
            {
                throw(error("Update cancelled."));
            }
        }
                    ttscommit;
                } //try
                catch (Exception::Deadlock)
                {
                   // ttsabort;
                     retry;
                   // _material.HasError = noYes::Yes;
                   // _material.update();
                }
                catch (Exception::Warning)
                {
                    ttsabort;
                   // retry;
                    _material.HasError = noYes::Yes;
                    _material.update();
                }
                catch (Exception::Error)
                {
                    ttsabort;
                   //retry;
                    _material.HasError = noYes::Yes;
                    _material.update();
                }
}
Начиная с элементарной разметки кода и неверного использования нижнего подчеркивания в обоих декларациях (как параметров, так и локальных переменных), заканчивая странным сравнением со строками, +=1 и ненужными if-ами. Зато код работает!!!)))
__________________
// no comments
Старый 28.11.2013, 09:35   #16  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Программисты - это зачастую люди, вышедшие из низов простого народа. Поэтому относиться к программистам надо как к крестьянам - снисходительно и философски. Помнится, тут было обсуждение, что во многих странах программистам даже необязательно иметь высшее образование.
Поэтому ведущим программистам надо еще иметь педагогическое образование, чтобы не вести себя с начинающими программистами как ведет себя наставник по вождению в автошколе - он все учит и учит, а ученики все никак не научатся ездить. Из-за этого многие наставники в автошколах нервные - из-за нехватки педагогического образования.
За это сообщение автора поблагодарили: eugene egorov (2), AlexeyS (1), Mileyko (-1), iCloud (1).
Старый 28.11.2013, 16:01   #17  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от dech Посмотреть сообщение
Я думаю, каждый из нас встречает такой быдолкод.
Не могу не поделиться.

Начиная с элементарной разметки кода и неверного использования нижнего подчеркивания в обоих декларациях (как параметров, так и локальных переменных), заканчивая странным сравнением со строками, +=1 и ненужными if-ами. Зато код работает!!!)))
Самое главное не трогать и не улучшать такой код.
Во первых это может быть кривой костыль для кривого стола - выпрямите все со стола полетит.
Во вторых, кто последний трогал - тот и виноват Я дошел до того что делаю переключатели чтобы при тестировании можно было перейти на предыдущую версию кода так как очень часто старый код даже не тестировали толком и все чужие баги могут стать твоими.
Старый 28.11.2013, 16:16   #18  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Программисты - это зачастую люди, вышедшие из низов простого народа. Поэтому относиться к программистам надо как к крестьянам - снисходительно и философски. Помнится, тут было обсуждение, что во многих странах программистам даже необязательно иметь высшее образование.
Поэтому ведущим программистам надо еще иметь педагогическое образование, чтобы не вести себя с начинающими программистами как ведет себя наставник по вождению в автошколе - он все учит и учит, а ученики все никак не научатся ездить. Из-за этого многие наставники в автошколах нервные - из-за нехватки педагогического образования.
Добавлю что дело бывает еще и просто в разности менталитетов разных народов. По отношению к красоте, сложности, руководству и так далее. То есть про терпимость это очень верно.

На моем текущем проекте AX программисты: индус, индус, пакистанец, испанец, поляк и русский. Британцев очень редко вижу в качестве программистов.
Старый 28.11.2013, 16:20   #19  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Простите, если я кого-то обидел - но я сам из низов общества 15 лет назад я давил тараканов, ползая по полу, занимаясь прокладкой кабелей. Но мечтал о программировании.
И я был таким же начинающим, когда меня случайно взяли "в Аксапту". Мне достался в наставники терпеливый и добрый ведущий разработчик, который научил меня почти всему, что я имею и умею в жизни
Старый 28.11.2013, 16:25   #20  
mnt_dx is offline
mnt_dx
Участник
Axapta Retail User
Лучший по профессии 2014
 
1,747 / 188 (10) ++++++
Регистрация: 17.02.2011
Адрес: К Северу через Северо-Запад
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
15 лет назад я давил тараканов
Как хорошо делать что-то полезное.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
The Death of Reason: #wpc13 US Dynamics: Where is MS Going in 2014? Blog bot DAX Blogs 2 12.07.2013 13:19
Rahul Sharma: MS Dynamics Ax 2009 EP Development - Part 2 Blog bot DAX Blogs 0 12.10.2010 15:05
emeadaxsupport: MS Project Integration resources with comma fail to export Blog bot DAX Blogs 0 12.05.2010 01:05
Инструкции по MS Axapta 3.0 HRM и MS Axapta 3.0 CRM? Горбунов Дмитрий DAX: Прочие вопросы 3 18.01.2006 12:35

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

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

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