Небольшая поправка:
X++:
public void mergeInsertSubnode(
SysComparable _topComparable,
SysCompareContextProvider _context,
SysComparable _nodeToInsert)
{
TreeNode previousSourceNode, previousNode;
TreeNode sourceNode;
boolean result;
TreeNode parentNodeInAot;
SysTreeNode nodeToInsert;
// JEV003545 "Перенос последних изменений из Ax40 в Ax2012", pkoz 09.06.2019 -->
TreeNode previousNode_MRC;
TreeNode droppedNode_MRC;
// JEV003545 "Перенос последних изменений из Ax40 в Ax2012", pkoz 09.06.2019 <--
;
nodeToInsert = _nodeToInsert as SysTreeNode;
if (_nodeToInsert &&
treeNode &&
TreeNode::isNodeReferenceValid(treeNode))
{
parentNodeInAot = TreeNode::findNode(SysTreeNode::getPath(treeNode));
if (parentNodeInAot)
{
sourceNode = nodeToInsert.parmTreeNode();
previousSourceNode = sourceNode.AOTprevious();
while (!previousNode && previousSourceNode)
{
previousNode = parentNodeInAot.AOTfindChild(previousSourceNode.treeNodeName());
previousSourceNode = previousSourceNode.AOTprevious();
}
// We get here e.g. if treeNode is the form design node. If previousNode=Null node is inserted last, it should be first.
if (! previousNode)
previousNode = parentNodeInAot;
result = parentNodeInAot.AOTDrop(sourceNode, previousNode);
// JEV003545 "Перенос последних изменений из Ax40 в Ax2012", pkoz 09.06.2019 -->
// при импорте xpo экспортированных из 4-ки в 2012-ю
// вызов parentNodeInAot.AOTDrop() работает не так как при импорте xpo выгруженных из 2012-й
// почему-то игнорируется параметр previousNode и добавленный узел становится самым первым, что очень
// неудобно - порядок нарушается и его приходится исправлять в ручную
// фиксим такое поведение
if (result)
{
droppedNode_MRC = parentNodeInAot.AOTfindChild(sourceNode.treeNodeName());
if (droppedNode_MRC)
{
previousNode_MRC = droppedNode_MRC.AOTprevious();
if (previousNode_MRC &&
previousNode_MRC.treeNodePath() != previousNode.treeNodePath())
{
droppedNode_MRC.AOTMove(parentNodeInAot, previousNode);
}
}
}
// JEV003545 "Перенос последних изменений из Ax40 в Ax2012", pkoz 09.06.2019 <--
if (result)
{
// node was successfully dropped
previousSourceNode = null;
previousNode = null;
sourceNode = null;
//Clear cached information
comparableTextList = null;
treeNode = parentNodeInAot;
}
}
}
}