project_ImportError.rar
Еще один глюк при сравнении таблиц при импорте.
В прилагаемом архиве два проекта, загружаем первый.
1. Опять запускаем импорт, жмем Show details, в окне импорта смотрим отличия в поле таблицы (Adjustment отличается), хотя по факту - не отличается.
2. При импорте второго проекта в окне импорта сравнении этой ошибки нет.
В-общем, если поле наследовано от edt с Adjustment = Right, то при сравнении во время импорта выдается, будто там - Left. Ошибка в
X++:
treeNodeImport = infolog.getImportedNode(...)
Если сразу вытащить свойства из treeNodeImport после его загрузки из файла, там действительно будет Left. Во втором проекте просто перенес строку с Adjustment над строкой ExtendedDataType. В этом случае все ок, свойства читаются корректно.
Ошибка повторяется на 4.0 и 2009.
P.S. Вроде ничего страшного, однако мешает при импорте больших проектов, когда нужно найти отличия в объектах в системе и xpo. Везде, где поле наследовано от edt с выравниваем вправо, будет отличие, которого на самом деле нет. Если нет вот такой вот "штучечки"
Есть ли у кого-нибудь такая штучечка?, такой проблемы не возникает, все равно по одному объекту сравнивать.
Вдогонку: если выгрузить таблицу с непустой группой полей AutoReport и пустой группой AutoLookup, то в окне импорта при сравнении будет отличие в порядке этих групп. Группы меняются местами, если первая с полями, вторая - без. Это на 4.0, на 2009 не проверял. У себя вылечил вот тут \Classes\SysTreeNode\comparableTextList.
Исходный код:
X++:
/*
Subnodes
*/
iterator = treeNode.AOTiterator();
if (iterator)
tmp = iterator.next();
while (tmp)
{
if (!SysTreeNode::hasSource(tmp) || tmp.AOTgetSource())
{
children += ' '+tmp.treeNodeName()+'\n';
}
tmp = iterator.next();
}
исправление:
X++:
/*
Subnodes
*/
iterator = treeNode.AOTiterator();
if (iterator)
tmp = iterator.next();
while (tmp)
{
if (!SysTreeNode::hasSource(tmp) || tmp.AOTgetSource())
{
// 23/12-2010 bugfix compare tables (see order of field groups AutoReport, AutoLookup.
// modify order to their native one) kird: -->
if (curuserid() == "kird")
{
if (treeNode.AOTname() == "Field Groups" &&
(tmp.treeNodeName() == "AutoReport" || tmp.treeNodeName() == "AutoLookup"))
{
children = ' '+"AutoReport"+'\n';
children += ' '+"AutoLookup"+'\n';
}
else
children += ' '+tmp.treeNodeName()+'\n';
}
else
// 23/12-2010 bugfix kird: <--
children += ' '+tmp.treeNodeName()+'\n';
}
tmp = iterator.next();
}