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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.01.2025, 12:31   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,973 / 3268 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Все что описал выше мы пробовали на
kernel 6.3.6000.8144

Взял последний доступный
kernel 6.3.6000.11008

все то же самое.

Бага не исправлена.
Обходной путь с заменой xRecord.linkPhysicalTableInstance() на SysDictTable::linkPhysicalTableInstance_MRC() решает вопрос.
За это сообщение автора поблагодарили: Gibrid (1).
Старый 28.01.2025, 19:55   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Бага не исправлена.
Ну... громко сказано, что это бага... Бага, которая проявляется при активации режима, от которого отказались (причем включение режима тоже нетривиальная штука) - багой не считается ))

А если серьезно - я считаю, что каждый софт должен заниматься своим делом. Не задача SQL Server считать бизнес-логику. Не дело АХ - указывать БД какой индекс брать.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Товарищ ♂uatr (1).
Старый 29.01.2025, 08:43   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,973 / 3268 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
А если серьезно - я считаю, что каждый софт должен заниматься своим делом. Не задача SQL Server считать бизнес-логику. Не дело АХ - указывать БД какой индекс брать.
Это просто вопрос выбора инструментария. С какой стороны проще оптимизатору запросов мозги вправлять. И что дешевле.
Разработчики аксапты считают, что все же можно использовать хинты. Вернули их в 365й. Хотя и изменили способ включения.
За это сообщение автора поблагодарили: sukhanchik (4).
Старый 29.01.2025, 11:09   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Это просто вопрос выбора инструментария. С какой стороны проще оптимизатору запросов мозги вправлять. И что дешевле.
Разработчики аксапты считают, что все же можно использовать хинты. Вернули их в 365й. Хотя и изменили способ включения.
Соглашусь, хотя такой подход сродни подходу "А давайте мы баг-трекер задач на АХ по-быстрому наваяем - наработки же есть - модуль проекты можно задействовать".

Т.е. с т.з. разработчиков аксапты - они всегда будут за то, чтобы любую задачу решить средствами АХ, т.к. они понимают как ее решить и как управлять и поддерживать это решение.
В то же время такой подход расходится с генеральной линией Microsoft (который собственно изначально систему и делает), который наоборот пытается дробить систему на сервисы. Например, в той же 365-й:
- попытка вынести оповещения (бизнес-события) и Workflow Power Automate
- попытка вынести логику расчета сводного планирования (да, там много нюансов, но сам факт) во внешний сервис
- попытка вынести мониторинг импорта данных во внешний сервис
- про БД я уже и не говорю
- баг-трекер Azure DevOps - это система вне 365-й
- еще в более ранних версиях из АХ был вырезан OLAP-механизм

Экономическая составляющая конечно очень существенно влияет на выбор решения, однако на мой взгляд "правильный" баланс между ролями систем позволяет с минимальными проблемами их апгрейдить относительно независимо друг от друга с максимальным разделением ответственности между специалистами (условно, за выбор индекса должна отвечать как БД, так и ДБА, а не АХ и программист АХ. Строить BI-отчеты должны BI-щики с их инструментарием, а не программисты АХ с их инструментарием и т.д.)

При таком подходе - условная замена АХ на другую систему, работающую также с SQL Server позволит ДБАшнику также отвечать за взятие нужных индексов, а BI-щикам также строить свои отчеты.
__________________
Возможно сделать все. Вопрос времени
Старый 06.02.2025, 11:43   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,973 / 3268 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Метод linkPhysicalTableInstance_MRC содержал ошибку, которая приводила к тому, что не всегда работало как надо.

Исправленная версия
X++:
/// <summary>
/// _thisRecord начинает ссылаться на данные _record
/// Метод сделан как замена стандартному xRecord.linkPhysicalTableInstance() чтобы обойти его ошибки.
/// подробнее см.
/// [url=https://axforum.info/forums/showthread.php?p=443440#post443440]Ax 2012 строит запрос с ошибкой в синтаксисе[/url]
/// [url=https://axforum.info/forums/showthread.php?p=437193#post437193]Работа с TempDB-таблицами[/url]
/// </summary>
/// <param name="_thisRecord">
/// Таблица, у которой переназначаются данные.
/// </param>
/// <param name="_record">
/// Таблица, на чьи данные теперь будут ссылаться
/// </param>
/// <returns>
/// Успешно или нет
/// </returns>
/// <remarks>
///
/// </remarks>

// CustCrmClientActivityDocTmp_MRC_Fix "Исправляем ошибку WITH ( INDEX(i105707_I_105707PHONEIDX_(null)))", PKoz3 22.01.2025

public static boolean linkPhysicalTableInstance_MRC(Common _thisRecord, Common _record)
{
    Common      tmpRecord;
    str         tableName;

    boolean     ret;
    ;

    tableName = _record.getPhysicalTableName();

    if (!tableName) // значит табличку не сохраняли еще
    {
        tmpRecord = _record.data();

        // см. RetailUtilities::getPhysicalTableName(_record);
        // Force instantiation of Temp DB table.

        // select generateonly firstOnly RecId from _record; // так не работает. Sql имя резервируется,
        // но потом useExistingTempDBTable() не подхватывает это имя

        // а так работает. Видимо потому, что физически табличка в БД создается.
        // _record.doInsert();
        // _record.doDelete();

        select firstOnly RecId from _record; // так тоже работает, но меньше телодвижений !

        tableName = _record.getPhysicalTableName();

        _record.data(tmpRecord);
    }

    ret = _thisRecord.useExistingTempDBTable(tableName);

    // ret = _thisRecord.linkPhysicalTableInstance(_record); // такой вариант вместо вызова useExistingTempDBTable() не работает
    // проверяли предположение что проблема была в том, что вызвали linkPhysicalTableInstance для непроинициализированного параметра
    // в котором еще нет физического имени таблицы (не в этом ли корень проблем ? Поэтому сперва принудительно инициализируем буфер,
    // чтобы вызов linkPhysicalTableInstance гарантированно шел на проинициализированном TempDb буфере)

    // Оказалось что нет - ошибка с хинтом воспроизводится после любого вызова linkPhysicalTableInstance
    // т.е. сам по себе linkPhysicalTableInstance - какой то кривой и что-то портит в xRecord, поэтому лучше
    // избегать вызовов linkPhysicalTableInstance

    return ret;
}
Теги
index hint, linkphysicaltableinstance

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axsa: MDM Adapter - Extending Dynamics AX 2012 R3 Master Data Management Blog bot DAX Blogs 0 22.05.2014 03:28
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
DAX: How to gain additional value from the Microsoft application platform with Microsoft Dynamics AX 2012 R2 Blog bot DAX Blogs 3 21.06.2013 15:16
DAX: Official Dynamics AX 2012 R2 Content (update) - Where is it, and how can you find out about updates? Blog bot DAX Blogs 0 03.12.2012 11:11
Dynamics AX Sustained Engineering: Servicing of Dynamics AX 2012 and Dynamics AX 2012 Feature Pack Blog bot DAX Blogs 0 08.05.2012 23:12

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

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

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