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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.10.2013, 09:07   #1  
eugenet is offline
eugenet
Участник
 
20 / 10 (1) +
Регистрация: 28.01.2010
! После инсталяции Map вдруг cтал Table?!
Доброго времени суток,

используем AX2012R2. После инсталяции VAR Model наблюдаем следующий феномен: объект SalesPurchTableToLineParameters раньше был Map а теперь стал вдруг Table. Его ID не изменилось, но он почему-то перекочевал из мэпов в таблицы. Модификаций в нем нету (SYS Layer). Как его "отправить" обратно в мэпы?
Спасибо за помощь!
Старый 25.10.2013, 15:40   #2  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Это действительно странно, но в AX2012R2 Map SalesPurchTableToLineParameters в таблице UtilIdElements "числиться" как Table а не TableMap.



А вот в SQLDictionary ее как раз нету

Попробуйте исправить запись в UtilIdElements и пезапустить AOS.

Тоже самое наблюдается в AX2012, похоже что проблема вылезла как раз после заливки VAR, посмотрите, может где-то пересекаются ID?
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!

Последний раз редактировалось plumbum; 25.10.2013 в 15:44. Причина: проверил в AX2012
Старый 06.12.2013, 14:16   #3  
igorbenko is offline
igorbenko
Участник
 
4 / 10 (1) +
Регистрация: 26.08.2010
Удалось решить проблему? Столкнулся с тем же но с Map SalesPurchBookVATProcessLogTransOper_RU. В UtilIdElement записано как Table и реально стала таблицей. На других приложениях в UtilIdElement запись 1 в 1 такая же а отображается в АОТ как Map.
Старый 07.02.2014, 14:22   #4  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Коллеги, как лечится этот глюк?
Старый 09.02.2014, 21:37   #5  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
А вы уверены что это баг? У меня чистая AX 2012 R2 CU7 и наугад выбранные маппы все в UtilElements и UtilIdElements числятся именно таблицами, а не маппами. Проверял вот эти маппы: SalesPurchTableToLineParameters, SalesDeliveryDateControlMap, SalesPurchLine, CustVendPaymModeFeeIntervalMap, InventPriceMap

Может тут какая-то фича скрывается, а?
Старый 10.02.2014, 10:24   #6  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Уверен, что это не баг, а фича. Но отображаются то они у вас в мапах? Если хоть одна отображается в таблицах - акса не синхронизируется.
Старый 11.02.2014, 00:47   #7  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Цитата:
Сообщение от Sada Посмотреть сообщение
Уверен, что это не баг, а фича. Но отображаются то они у вас в мапах? Если хоть одна отображается в таблицах - акса не синхронизируется.
Отображается в маппах, при этом в UtilElements идет как Table.
Старый 11.02.2014, 10:33   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от Kabardian Посмотреть сообщение
Отображается в маппах, при этом в UtilElements идет как Table.
Думаю так и должно быть, потому что типа МАП в перечислении нету. Тут в чём то другом проблема. Ждем Ivanhoe
Старый 11.02.2014, 12:22   #9  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Цитата:
Сообщение от Sada Посмотреть сообщение
Думаю так и должно быть, потому что типа МАП в перечислении нету. Тут в чём то другом проблема. Ждем Ivanhoe
Как-то упустил это сообщение. Есть тип TableMap.
Старый 10.02.2014, 14:17   #10  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
В MS знают про проблему, мой запрос был не первым. Но т.к. последовательность действий не повторить, я так понимаю, готового решения пока нет. На одном из проектов руками правили в SQL бд.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: Kabardian (3).
Старый 10.02.2014, 14:54   #11  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
удалить в базе на СКЛ и синхронизировать в аксе?
Старый 10.02.2014, 14:55   #12  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Нет, что-то другое.. именно в БД приложения поменять. Уточню у разработчиков.
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: Sada (4).
Старый 11.02.2014, 10:59   #13  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Уточнил у своих - собирали сбоку новое приложение т.е. совсем не быстрый способ.
Пока сильно панику не подымаем, т.к. только на DEV случалось, а тестирование в отдельной системе делаем.

Первая линия поддержки MS начала искать похожие кейсы, следующий апдейт - 17-го февраля. Попробую их ускорить.
__________________
Ivanhoe as is..
Старый 11.02.2014, 11:15   #14  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Уточнил у своих - собирали сбоку новое приложение
А если это произошло в собранном сбоку новом приложении, тогда что делать? :-) У меня как чистая инсталляция AX 2012 R2 + CU7 и получилась такая засада...
Старый 11.02.2014, 11:22   #15  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Было такое. Не помню в какой таблице (UtilElements?) есть бинарное поле(массив байтов вроде). "Сигнатура" в этом поле оказалась битой. Короче поменяли несколько байт этого поля на верные, такие как должны быть в мапе. Подробности к сожалению не могу сейчас дать.
Старый 11.02.2014, 11:07   #16  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Да. мы тоже собирали новое приложение, думал как то проще можно...
Старый 11.02.2014, 11:23   #17  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Мы люди терпеливые
Старый 11.02.2014, 22:47   #18  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Сорри, значит был не прав
Старый 12.02.2014, 13:36   #19  
Stainless is offline
Stainless
Участник
MCBMSS
Columbus IT
 
34 / 114 (4) +++++
Регистрация: 26.01.2007
Thumbs up Решение
Коллеги, нам удалось исправить данную проблему копированием поля Properties таблицы ModelElementsData базы модели и одной базы в другую, пример скрипта:
X++:
USE AX60_DEV_model

UPDATE [dbo].[ModelElementData]
SET [dbo].[ModelElementData].Properties = GOOD_BASE.Properties
FROM [dbo].[ModelElementData] AS BAD_BASE
LEFT JOIN [AX60_TST_model].[dbo].[ModelElementData] AS GOOD_BASE
	ON BAD_BASE.ElementHandle = GOOD_BASE.ElementHandle
WHERE GOOD_BASE.ElementHandle = 185644
ElementHandle можно определить по таблице ModelElement

Ссылка на тему с аналогичной проблемой:
http://community.dynamics.com/ax/f/3...71/249240.aspx

PS. Удобный сайт для форматирования SQL-операторов:
http://poorsql.com/

Последний раз редактировалось Stainless; 12.02.2014 в 13:40. Причина: Очепятка
За это сообщение автора поблагодарили: mazzy (2), AlGol (2), Oz (2), db (10), sukhanchik (20), Logger (8), b_nosoff (2), Raven Melancholic (5), Sada (4), leva (1), Ivanhoe (5), oip (2), gl00mie (15), Stitch_MS (6), Kabardian (6), Dreadlock (1), pedrozzz (1).
Старый 28.08.2020, 19:43   #20  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Stainless Посмотреть сообщение
Коллеги, нам удалось исправить данную проблему копированием поля Properties таблицы ModelElementsData базы модели и одной базы в другую, пример скрипта:
Спасибо.

В скрипте есть ошибка. Не учитывается что табличка может жить на нескольких слоях.
Поправил, чтобы учитывался слой.
Дописал в SysDictTable такой метод (он автоматически генерирует исправляющий скрипт)
X++:
public static server str sqlQueryRestoreTablePropsByTempl_MRC(
    TableId     _tableId,
    str         _modelDBNameTemplate,
    boolean     _elementHandleEquel = false
    )
{
    SysModelElement     sysModelElement;

    SqlStatementExecutePermission   permission;
    Statement                       statement;
    ResultSet                       resultSet;

    TableName           tableName    = tableId2name(_tableId);
    str     dbo = "[" + xSession::getDbSchema() + "]";
    str     modelDBName = "[" + SqlSystem::modelDatabaseBackendName() + "]";
    str     modelDBNameTemplate;
    str     elementHandleGood;
    str     elementHandleBad;
    str     queryText;
    str     queryTextForElementHandleGood;
    ;

    if (_modelDBNameTemplate)
    {
        modelDBNameTemplate = "[" + _modelDBNameTemplate + "]";
    }
    else
    {
        throw error("Нужно указать имя базы образца!");
    }

    select  sysModelElement
    where   sysModelElement.AxId == _tableId
        &&  sysModelElement.Name == tableName
        &&  sysModelElement.ElementType == UtilElementType::Table;

    if (!sysModelElement.RootModelElement)
    {
        throw error("Не смогли определить RootModelElement");
    }

    elementHandleBad = int642str(sysModelElement.RootModelElement);

    if (_elementHandleEquel)
    {
        elementHandleGood = elementHandleBad;
    }
    else
    {
        queryTextForElementHandleGood = strFmt(
@"SELECT RECID
    FROM %3.%1.[SYSMODELELEMENT] AS GOOD_BASE
WHERE   GOOD_BASE.ElementType        = 44 /* Table */
    AND GOOD_BASE.Name               = N'%2'
    AND GOOD_BASE.PARENTMODELELEMENT = 0"
            ,dbo // 1
            ,tableName // 2
            ,modelDBNameTemplate // 3
            );

        permission = new SqlStatementExecutePermission(queryTextForElementHandleGood);
        permission.assert();

        try
        {
            //BP Deviation documented
            statement = new Connection().createStatement();
            resultSet = statement.executeQuery(queryTextForElementHandleGood);

            if (resultSet.next())
            {
                elementHandleGood = int642str(resultSet.getInt64(1));
            }
        }
        catch
        {
            info(strfmt("Error %1. Error text: %2", statement.getLastError(), statement.getLastErrorText()));
        }
    }

    if (!elementHandleGood)
    {
        throw error(strFmt("Не удалось определить ElementHandle для таблички в базе образце."));
    }

    queryText = strFmt(@"
UPDATE %2.%1.[ModelElementData]
SET %2.%1.[ModelElementData].Properties = GOOD_BASE.Properties
FROM %2.%1.[ModelElementData] AS BAD_BASE
LEFT JOIN %3.%1.[ModelElementData] AS GOOD_BASE
    ON   BAD_BASE.ElementHandle = %5
    AND GOOD_BASE.ElementHandle = %4
WHERE   GOOD_BASE.ElementHandle = %4
AND GOOD_BASE.LayerId = (SELECT MAX(LayerId) from %3.%1.[ModelElementData] AS GOOD_BASE2 where GOOD_BASE2.ElementHandle = %4)
AND BAD_BASE.LayerId  = (SELECT MAX(LayerId) from %2.%1.[ModelElementData] AS BAD_BASE2  where BAD_BASE2.ElementHandle  = %5)
",
    dbo, // 1
    modelDBName, // 2
    modelDBNameTemplate, // 3
    elementHandleGood, // 4
    elementHandleBad // 5
    );

    return queryText;
}
пример исправления для таблички SalesTable
База образец называется AXJW12_TEST_model
X++:
static void fixTableDefinition(Args _args)
{
    info(SysDictTable::sqlQueryRestoreTablePropsByTempl_MRC(tableNum(SalesTable), "AXJW12_TEST_model"));
    // AifChangeTracking::executeDirectSqlUpdate(SysDictTable::sqlQueryRestoreTablePropsByTempl_MRC(tableNum(SalesTable), "AXJW12_TEST_model")); // для тех кто не боится
    info("Не забыть рестартовать аос.");
}
За это сообщение автора поблагодарили: mazzy (5), pedrozzz (2).
Теги
ax2012, ax2012r2, map, table

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Классы коллекций (инициализация, сериализация): List, Set, Map. petergunn DAX: База знаний и проекты 10 04.06.2018 18:45
david_kidder: ReferenceTable & Table References on EDT Blog bot DAX Blogs 0 05.09.2013 15:11
ax-erp: ReferenceTable & Table References on EDT Blog bot DAX Blogs 0 18.12.2012 02:11
PatrickChua: Temporary table Blog bot DAX Blogs 0 04.05.2009 14:05
fieldNum(map) <-> fieldNum(table) ? EVGL DAX: Программирование 8 26.01.2006 15:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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