|  13.02.2014, 13:03 | #21 | 
| Талантливый разгвоздяй | 
			
			А кто-нибудь может забэкапить таблицу ModelElementData из чистого стандарта AX 2012 CU7 и выложить сюда, если не сложно? :-) У меня под рукой нет такой системы, а разворачивать долго... | 
|  | 
|  17.02.2014, 18:30 | #22 | 
| Участник | 
			
			Чистой CU7 под рукой нет   Ответил саппорт Microsoft - предложение такое же как выше в ветке с заменой Set md.Properties = md_base.Properties 
				__________________ Ivanhoe as is.. | 
|  | |
| За это сообщение автора поблагодарили: Kabardian (2). | |
|  19.11.2018, 16:05 | #23 | 
| Участник | 
			
			Предложенный способ помогает, но как-то уже надоело время от времени это чинить. 3-4 раза перестоишь перекрестные ссылки и "ага"  Не выходило ли каких-либо хостфиксов по этой проблеме, которые бы решили это? У нас CU13 и обновления до мая этого года. | 
|  | 
|  28.08.2020, 19:43 | #24 | 
| Участник | Цитата: В скрипте есть ошибка. Не учитывается что табличка может жить на нескольких слоях. Поправил, чтобы учитывался слой. Дописал в 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; } База образец называется 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). | |
|  21.07.2021, 13:04 | #25 | 
| Участник | 
			
			Может быть у кого-то есть джобик для периодического автоматического поиска таких "сломанных" вьюшек и мэпов ?
		 
				__________________ Дмитрий | 
|  | 
|  28.03.2022, 13:04 | #26 | 
| Участник | Цитата: Она крутилась и ловила смену типа объекта AOT. И она выявила интересную особенность. Было много "ложных" срабатываний, в разы больше чем зафиксированных случаев "мутаций" табличных типов (таблица, вью, мап). Из этого можно сделать вывод, что в памяти структура аота повреждается намного чаще, но не все такие повреждения сбрасываются в базу модели. | 
|  | 
|  28.03.2022, 13:07 | #27 | 
| Участник | 
			
			А кто-нибудь разбирал бинарный формат поля для табличного узла ? Есть идея, повесить триггер на табличку. Он бы при обновлении "выкусывал" тип объекта и если тип меняется то откатывал бы транзакцию. Думаю, так было бы намного лучше. Там правда не только тип меняется. Иногда слетают Primary / Cluster ключи. Но тут тоже можно придумать что-нибудь. | 
|  | 
|  28.03.2022, 18:50 | #28 | 
| Участник | 
			
			да. mazzy: Разбираюсь, как можно уменьшить размер model-базы в ax2012, чтобы ускорить Аксапту в виртуалке. Цитата: https://www.youtube.com/watch?v=ZhO_qROBGX0 в общем, такой себе путь. | 
|  | 
|  27.01.2024, 14:57 | #29 | 
| Участник | Цитата: 
		
			Сообщение от Logger
			   А кто-нибудь разбирал бинарный формат поля для табличного узла ? Есть идея, повесить триггер на табличку. Он бы при обновлении "выкусывал" тип объекта и если тип меняется то откатывал бы транзакцию. Думаю, так было бы намного лучше. Там правда не только тип меняется. Иногда слетают Primary / Cluster ключи. Но тут тоже можно придумать что-нибудь. Защита от повреждения типа таблицы в Аксапте 2012 R3 | 
|  | |
| За это сообщение автора поблагодарили: alex55 (3). | |
|  28.01.2024, 13:53 | #30 | 
| Участник | 
			
			Вообще, после того как после построения перекрестных ссылок мы стали перезапускать АОС, проблема вроде ушла. Главное, чтобы именно никто не успел после построения перекрестных ссылок что-то сделать с таблицами, вьюхами, мапами. | 
|  | 
|  28.01.2024, 14:08 | #31 | 
| Участник | Цитата: Коллега, обнаружил, что сбор перекрестных ссылок и глобальную компиляцию лучше делать в монопольном режиме на аосе, тогда проблема практически не возникает. Мы высадили эти процедуры на отдельный аос и все стало значительно лучше. Но триггер тоже не помешает. | 
|  | 
| Теги | 
| ax2012, ax2012r2, map, table | 
|  | 
| 
 |