Hi community, here I show the final solution  that resolve my problem. It was necessary create 3 methods.  In this solution the hierarchy was built programatically. 

ClassMethod GetUnitLevel(pUnidad As %Integer, pLevelReq As %Integer, ByRef pSC As %Status) As %String
{
Set str = ""
Set pSC = $$$OK
Try
{
Set objUnidad = ##class(AUPOL.CT.UnidadPolicial).%OpenId(pUnidad)

Set tUnidadInterno = objUnidad.IdUnidadInterno

#Dim objCTUnidad As AUPOL.CT.Unidad
Set objCTUnidad = ..GetCTUnidadByUniCodigo(tUnidadInterno)

If $IsObject(objCTUnidad)
{
Set objCTUnidadPadre = ..GetUnitLevelRef(objCTUnidad,pSC,.pArray)
Quit:$System.Status.IsError(pSC)


Set total = $order(pArray(""),-1)
Set nivel = 0
Set cursor = ""

If ( (pLevelReq -1) = total)
{
Set str = objCTUnidad.UNIDESCRIPCION
}
ElseIf ((pLevelReq > total))
{
Set str = ""
}
Else
{
For
{
Set nivel = nivel + 1
Set cursor = $order(pArray(cursor),-1)
Set str = pArray(cursor)

  
Quit:((pLevelReq = nivel))
}
}
"pLevelReq ",pLevelReq,!
"total ",total,!
"str ",str,!
}
}
Catch(e)
{
Set pSC = e.AsStatus()
}
Quit str
}

ClassMethod GetUnitLevelRef(pCTUnidad As AUPOL.CT.Unidad, ByRef pSC As %Status, ByRef pArray) As AUPOL.CT.Unidad
{
#Dim objUnidad As AUPOL.CT.Unidad
Set objUnidad = pCTUnidad
Try

Set objPadre = ..GetCTUnidadByUniCodigo(pCTUnidad.UNIPADRE,.pSC)
Quit:$System.Status.IsError(pSC)

If ($IsObject(objPadre))
{
If ($DATA(pArray) = 0)
{
Set pArray(1) = objPadre.UNIDESCRIPCION
}
ELSE
{
Set iNext = $order(pArray(""),-1) + 1

Set pArray(iNext) = objPadre.UNIDESCRIPCION
}

If ( objPadre.UNIPADRE > 0 )
{
Set objPadre = ..GetUnitLevelRef(objPadre, .pSC,.pArray)
Quit:$System.Status.IsError(pSC)
}
Set objUnidad = objPadre
}
}
Catch(e)
{
Set pSC = e.AsStatus()
}
Quit objUnidad
}

ClassMethod GetCTUnidadByUniCodigo(pUniCodigo As %String, ByRef pSC As %Status) As AUPOL.CT.Unidad
{
Set obj = ""
Try
{
Set sql = "SELECT %Id "_
 "FROM AUPOL_CT.Unidad "_
"WHERE Unicodigo = ? "

Set res = ##Class(%ResultSet).%New()

Set pSC = res.Prepare(sql)
Quit:$System.Status.IsError(pSC)

Set pSC = res.Execute(pUniCodigo)
Quit:$System.Status.IsError(pSC)

If (res.Next())
{
Set obj = res.GetObject()
}
}
Catch(e)
{
Set pSC = e.AsStatus()
}
Quit obj
}

ClassMethod TieneSubordinados(pUniCodigo As %String, ByRef pSC As %Status) As %Boolean
{
Set bool = 0
Try
{

Set sql = "SELECT SUM(*) As NumeroHijos "_
 "FROM AUPOL_CT.Unidad "_
"WHERE UNIPADRE = ? "

Set res = ##Class(%ResultSet).%New()

Set pSC = res.Prepare(sql)
Quit:$System.Status.IsError(pSC)

Set pSC = res.Execute(pUniCodigo)
Quit:$System.Status.IsError(pSC)

If (res.Next())
{
Set iNum = res.Get("NumeroHijos")

if (iNum > 0)
{
Set bool = 1
}
}


}
Catch(e)
{
Set pSC = e.AsStatus()
}
Quit bool
}

}