Цитата:
Сообщение от
sukhanchik
Там похоже ошибка в этом месте
X++:
----------------------------------------------------------------------------------------------
-- Step 4 Fix the field ids in SQLDictionary which do not match
----------------------------------------------------------------------------------------------
PRINT 'Step 4';
WITH t AS (
SELECT (
SELECT m1.NAME
FROM ModelElement m1
WHERE m1.ElementHandle = m.ParentHandle
) AS [Table Name],
m.NAME AS [mName],
m.AXid,
s.RECID,
M.ParentId,
s.TableId,
s.FieldID,
S.NAME,
s.SQLNAME
FROM ModelElement m
LEFT OUTER JOIN AX2012DB.dbo.SQLDICTIONARY s
ON m.ParentId = s.TABLEID
AND s.NAME = upper(m.NAME) collate Latin1_General_CI_AS
WHERE m.ElementType = 42 -- UtilElementType::TableField
AND (s.ARRAY = 1 OR s.ARRAY IS NULL)
AND (s.FieldID > 0 OR s.FieldID IS NULL)
AND s.FieldID != m.AxId
)
UPDATE AX2012DB.dbo.SQLDICTIONARY
SET FIELDID = (t.axid * -1) -- Set to a negative number but correct ID
FROM t join AX2012DB.dbo.SQLDICTIONARY s
ON upper(t.mName) collate Latin1_General_CI_AS = s.NAME
AND s.FieldID <> 0
AND s.TableId = t.ParentId
проблема в том что для табличек с наследованием (DirPartyTable -->..--> CompanyInfo) таблички наследники в ModelElement содержат ParentId равный идентификатору таблички (для CompanyInfo - будет 41 т.е. tableNum(CompanyInfo), а в SqlDictionary содержат в TableId значение корневой таблички иерархии, т.е. 2303 = tableNum(DirPartyTable) )