Все сделал. Если кому интересно, вот код:
X++:
class ChangeRegionCodes
{
int64 i,z;
}
private void ChangeCode(TreeNode _objTreeNode)
{
int line;
str value;
;
if (_objTreeNode)
{
_objTreeNode = _objTreeNode.AOTfirstChild();
while (_objTreeNode)
{
z++;
try
{
value = _objTreeNode.AOTgetProperty("CountryRegionCodes");
if(strContains(value, "RU") && !strContains(value, "UA"))
{
_objTreeNode.AOTsetProperty("CountryRegionCodes", value + ",UA");
_objTreeNode.AOTsave();
i++;
}
}
catch
{
infolog.clear(0);
}
this.ChangeCode(_objTreeNode);
_objTreeNode = _objTreeNode.AOTnextSibling();
}
}
}
private void Proceed()
{
TreeNode objTreeNode;
utcDateTime time;
setPrefix("Change region codes");
time = DateTimeUtil::utcNow();
objTreeNode = TreeNode::findNode(@"\Menu Items\");
this.ChangeCode(objTreeNode);
objTreeNode = TreeNode::findNode(@"\Data Dictionary\Tables\");
this.ChangeCode(objTreeNode);
objTreeNode = TreeNode::findNode(@"\Data Dictionary\Maps\");
this.ChangeCode(objTreeNode);
objTreeNode = TreeNode::findNode(@"\Data Dictionary\Views\");
this.ChangeCode(objTreeNode);
objTreeNode = TreeNode::findNode(@"\Data Dictionary\Extended Data Types\");
this.ChangeCode(objTreeNode);
objTreeNode = TreeNode::findNode(@"\Data Dictionary\Base Enums\");
this.ChangeCode(objTreeNode);
objTreeNode = TreeNode::findNode(@"\Menus\");
this.ChangeCode(objTreeNode);
objTreeNode = TreeNode::findNode(@"\Forms\");
this.ChangeCode(objTreeNode);
info(strFmt("Process started at %1",time));
info(strFmt("Count of objects changed: %1. Objects count: %2", i, z));
info(strFmt("Process ended at %1",DateTimeUtil::utcNow()));
}
static server void main()
{
ChangeRegionCodes c = new ChangeRegionCodes();
c.Proceed();
}
Проверено, отработал отлично, но очень долго (в моем случае около 11 часов)