/// <summary>
        /// Изменяем урл приводя его к урлу родительского журнала.
        /// </summary>
        /// <param name="urlBuilder"></param>
        /// <param name="menuItem"></param>
        private static void MoveReferenceToParent(MainPageUrlBuilder urlBuilder, BaseMenuItem menuItem, BaseMenuItem parentItem)
        {
            if (string.IsNullOrEmpty(menuItem.ReferenceName))
            {
                return;
            }
            var keys = urlBuilder.QueryParameters.Keys.Where(r => r.EndsWith(".id")).ToList();

            if (keys.Count == 0)
            {
                return;
            }

            var newValues = new Dictionary <string, string>();

            foreach (var key in keys)
            {
                if (key == menuItem.ReferenceName + ".id")
                {
                    var value = urlBuilder.QueryParameters[key];
                    urlBuilder.QueryParameters.Remove(key);
                    urlBuilder.QueryParameters["ref" + parentItem.TableName] = value;
                }
                else if (key.StartsWith(menuItem.ReferenceName))
                {
                    var value = urlBuilder.QueryParameters[key];
                    urlBuilder.QueryParameters.Remove(key);
                    var newKey = key.Substring(menuItem.ReferenceName.Length + 1);
                    newValues[newKey] = value;
                }
                else
                {
                    urlBuilder.QueryParameters.Remove(key);
                }
                foreach (var newValue in newValues)
                {
                    urlBuilder.QueryParameters[newValue.Key] = newValue.Value;
                }
            }
        }
        /// <summary>
        /// Изменяем урл приводя его к урлу дочернего журнала.
        /// </summary>
        /// <param name="menuItem"></param>
        /// <param name="parentMenuItem"></param>
        /// <param name="url"></param>
        private static void MoveReferenceToChilds(BaseMenuItem menuItem, BaseMenuItem parentMenuItem, MainPageUrlBuilder url)
        {
            if (string.IsNullOrEmpty(menuItem.ReferenceName))
            {
                return;
            }
            var keys   = url.QueryParameters.Keys.Where(r => r.EndsWith(".id")).ToList();
            var refKey = "ref" + parentMenuItem.TableName;

            if (!parentMenuItem._isCurrentTable &&
                menuItem.Menu.BaseNavigatorControl.BaseNavigatorValues.ContainsKey(parentMenuItem.TableType) &&
                menuItem.Menu.BaseNavigatorControl.BaseNavigatorValues[parentMenuItem.TableType] != null)
            {
                //проставление референса по родительской таблице, если она выбрана
                //смотрим в навигаторе потому как навигатор хранит выбранные записи по референсам (в урле хранится лишнее)
                var value = menuItem.Menu.BaseNavigatorControl.BaseNavigatorValues[parentMenuItem.TableType].ToString();
                url.QueryParameters[refKey] = value;
                url.QueryParameters[menuItem.ReferenceName + ".id"] = value;
            }
            if (keys.Count == 0 && !parentMenuItem._isCurrentTable)
            {
                return;
            }

            foreach (var key in keys)
            {
                var value = url.QueryParameters[key];
                url.QueryParameters.Remove(key);
                url.QueryParameters[menuItem.ReferenceName + "." + key] = value;
            }
            //проставляем референс по выбранной записи
            //смотрим в этой коллекции потому как в текущем журнале изменяется выбранная в урле
            if (parentMenuItem._isCurrentTable && url.QueryParameters.ContainsKey(refKey))
            {
                var value = url.QueryParameters[refKey];
                url.QueryParameters[menuItem.ReferenceName + ".id"] = value;
            }
        }