|
![]() |
#1 |
Banned
|
Цитата:
Сообщение от belugin
![]() Невозможно выбрать запись в 'Таблица конфигурации' ('ConfigTable')
Использован оператор объединения таблиц join, но выражение WHERE не содержит связи между таблицами. X++: static void Test3Tables(Args _args) { QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(InventSum), 'InventSum') .join(tableNum(InventDim)) .link(fieldNum(InventSum, InventDimID), fieldNum(InventDim, InventDimID)) .outerJoin(tableNum(ConfigTable), 'ConfigTable') .link(fieldNum(InventDim, ConfigId), fieldNum(ConfigTable, ConfigId)) .matches(fieldNum(ConfigTable, RecID), '(ConfigTable.ItemId==InventSum.ItemID)') .run(); ; qr.next(); } |
|
![]() |
#2 |
Участник
|
Можно ли узнать, что именно необходимо расширить и какой код в 7.2?
См. также обсуждение некоторых изменений модуля в 7.3 Последний раз редактировалось belugin; 19.01.2018 в 13:00. |
|
![]() |
#3 |
Участник
|
Максим, а вот такое выражение
X++: .link(fieldNum(InventSum, InventDimID), fieldNum(InventDim, InventDimID)) X++: .linkRelation('\Data Dictionary\Tables\InventSum\Relations\InventDim') Так бы лучше инкапсуляция была и можно было бы проверку от опечаток сделать внутри вызова linkRelation(). Тогда не было бы ситуации когда в имени таблицы или поля опечатался и запрос работает, но неправильно. |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от Logger
![]() X++: .linkRelation('\Data Dictionary\Tables\InventSum\Relations\InventDim') X++: .linkRelation(tableStr(InventSum), relationStr(InventSum, InventDim)) |
|
![]() |
#5 |
Участник
|
|
|
![]() |
#6 |
Участник
|
Кстати да, не в обиду, но хорошее замечание. т.е. нарушается одно из правил кодеревью что код не должен быть персонализирован(а так в АХ больше никто не пишет)
читать такой код на мой взгляд сложно(непонятно на каком классе вызывается методы), да и отлаживать подозреваю тоже как вообще такое пропускают ![]() |
|
![]() |
#7 |
Участник
|
За несколько лет никто не жаловался именно на это. Это не фирменный стиль belugin это FluentInterface - распространенный прием в языках, где нет property и collection initializers (например в java, с которой слизали X++).
Их не надо отлаживать особо - там никакой логики нет, только передача параметров. BTW у отладчика в VS гораздо больше возможностей, чем то, к чему мы привыкли на предыдущих версиях AX (step into specific, tracepoints, conditional breakpoints, etc) если вдруг кто-то не знает что-то из этого, рекомендую почитать доку. |
|
|
За это сообщение автора поблагодарили: Link (5). |
![]() |
#8 |
Banned
|
Цитата:
Сообщение от belugin
![]() За несколько лет никто не жаловался именно на это. Это не фирменный стиль belugin это FluentInterface - распространенный прием в языках, где нет property и collection initializers (например в java, с которой слизали X++).
Их не надо отлаживать особо - там никакой логики нет, только передача параметров. BTW у отладчика в VS гораздо больше возможностей, чем то, к чему мы привыкли на предыдущих версиях AX (step into specific, tracepoints, conditional breakpoints, etc) если вдруг кто-то не знает что-то из этого, рекомендую почитать доку. X++: c1.FirstName("vinod").LastName("srivastav").Sex("male").Address("bangalore").Print(); А по теме, раз отчет то делайте временную таблицу и забудьте о нюансах join, делайте максимально тупо. Вот на форме, да стоит думать, но для отчета нет смысла. Для отчета нужна гибкость, а это временная таблица. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5). |
![]() |
#9 |
Участник
|
Цитата:
Цитата:
И категорически запрещать. Каждый раз проклинаю. И ни разу не порадовался.
Цитата:
А по теме, раз отчет то делайте временную таблицу и забудьте о нюансах join, делайте максимально тупо.
|
|
![]() |
#10 |
Banned
|
Цитата:
Сам каждый раз поражаюсь требованиям и ситуациям. Возможность дебажить и расширять. Вот что нужно "прикладному" программисту. Экономия на переменных и строках, для красоты - это говнокод на самом деле. То есть красиво придавленное но г@вно. Даже инициализацию параметров требуется дебажить и иногда менять. А когда иерархия и все в строку да с запуском в конце то уматываешься проходить по всем параметрам пока до нужного метода доберешься. Часто приходиться переписывать такой код добавляя переменные для удобства дебага. Те же join это примерно такая же "оптимизация" как и сокращенный код. В топку такую оптимизацию. Лучше лишний раз сходить на SQL Server. Не нужно ничего оптимизировать заранее и без реальной на то необходимости. |
|
|
За это сообщение автора поблагодарили: Link (5), Pandasama (1), Stitch_MS (2). |
![]() |
#11 |
Участник
|
Про возможность дебажить я согласен, что она меньше. На практике жалоб от коллег, что это сильно мешает не слышал (может слышал, но забыл) но это не тот вопрос, которые регулярно всплывает.
У нас не очень много такого кода в production но много такого в тестах. Учтите, что в AX7 можно просто провалиться по F12 в метод и поставить breakpoint уже там. К сожалению, в X++ (в отличие от C#) не работает "step into specific" и бряки по имени функции. Собственно те же проблемы возникают при отладке вызова с несколькими аргументами, только там нет имен параметров. Про возможность расширять, я не очень понял. EVGL сказал, нашел две проблемы: 1. private методы 2. создание запроса не выделено в отдельный метод По-моему, это ортогонально стилю заполнения параметров. Цитата:
Вот что нужно "прикладному" программисту.
Экономия на переменных и строках, для красоты - это говнокод на самом деле. То есть красиво придавленное но г@вно. Цитата:
Даже инициализацию параметров требуется дебажить и иногда менять. А когда иерархия и все в строку
Цитата:
да с запуском в конце то уматываешься проходить по всем параметрам пока до нужного метода доберешься. Часто приходиться переписывать такой код добавляя переменные для удобства дебага.
Цитата:
Те же join это примерно такая же "оптимизация" как и сокращенный код. В топку такую оптимизацию.
Лучше лишний раз сходить на SQL Server. Не нужно ничего оптимизировать заранее и без реальной на то необходимости. |
|
![]() |
#12 |
Британский учённый
|
Коллега конечно излишне эмоционален, но я тоже считаю, что такого кода не должно быть в стандарте. Ну и сам X++ Coding Standards:
General Guidelines
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
|
За это сообщение автора поблагодарили: skuull (1), Stitch_MS (2), Vadik (1), AlGol (3). |
![]() |
#13 |
Участник
|
Цитата:
Цитата:
Only one statement per line.
Цитата:
Break up complex expressions that are more than one line - make it visually clear.
Цитата:
Use a single blank line to separate entities.
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|