Показать сообщение отдельно
Старый 16.11.2015, 11:55   #12  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Все сделал. Если кому интересно, вот код:

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 часов)