у нас есть такой метод
\Classes\SysTreeNode\findProjectNode
X++:
/// <summary>
/// По указанному пути к проекту возвращает соотв. ProjectNode
/// </summary>
/// <param name="_projectPath">
/// Путь к проекту в формате TreeNode
/// </param>
/// <returns>
/// объект ProjectNode либо null, если проект не найден или путь не относится к проектам
/// NB! возвращается "сырой" объект ProjectNode, чтобы с ним можно было работать, надо вызвать на нем либо getRunNode(), либо loadForInspection()
/// см. также SysTestProject::getProjectNode()
/// </returns>
/// <remarks>
/// в отличие от прочих узлов AOT, проекты не ищутся через TreeNode::findNode(), поэтому и нужен отдельный метод
/// </remarks>
/// <modification projid="GRD_R6084" author="gl00m" date="15.02.2012">
/// Допилить форму проектов текущего пользователя, чтобы автоматом открывать форму поиска по проекту
/// DEV_xRefLayer "Пробивать в перекрестных ссылках слой", PKoz 19.12.2017
/// </modification>
public static ProjectNode findProjectNode(
TreeNodePath _projectPath,
CreatedBy _createdBy = '')
{
identifiername projectName;
UtilElementType applObjType;
ProjectListNode projectList;
ProjectNode ret;
;
if (_projectPath != '')
{
projectName = SysTreeNode::path2ApplObjectName(_projectPath);
if (projectName != '')
{
applObjType = SysTreeNode::path2ApplObjectType(_projectPath);
if (applObjType == UtilElementType::SharedProject)
{
projectList = SysTreeNode::getSharedProject();
}
else
if (applObjType == UtilElementType::PrivateProject)
{
projectList = SysTreeNode::getPrivateProject();
}
if (projectList)
{
if (applObjType == UtilElementType::PrivateProject)
{
ret = projectList.AOTfindChild(substr(projectName, strLen(_createdBy + "_") + 1, 1000) );
}
else
{
ret = projectList.AOTfindChild(projectName);
}
}
}
}
return ret;
}