/// <summary>
        /// Создает ссылку на элемент перечисления.
        /// </summary>
        /// <param name="полноеИмяТипа">Полное имя типа объекта, например "Перечисление.СтавкиНДС".</param>
        /// <param name="указатель">Имя (идетификатор) элемента.</param>
        /// <param name="синоним">Синоним элемента.</param>
        /// <returns>Возвращает ссылку на элемент перечисления.</returns>
        public ПеречислениеСсылка ПолучитьПеречислениеСсылку(string полноеИмяТипа, string указатель, string синоним = "")
        {
            УзелМетаданных узелМетаданных;

            if (!this.Клиент.Метаданные.ПопыткаПолучить(полноеИмяТипа, out узелМетаданных))
            {
                throw new ArgumentException(String.Format("Ошибка при получении ссылки на объект. Не удалось обнаружить объект метаданных \"{0}\".", полноеИмяТипа), "полноеИмяТипа");
            }
            if (((МетаданныеОбъект)узелМетаданных).ТипКоллекции() != ТипКоллекции.Перечисление)
            {
                throw new Exception("Указан неверный тип коллекции.");
            }

            Guid   идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(полноеИмяТипа, указатель);
            Ссылка ссылка   = null;
            WeakReference <Ссылка> слабСсылка;

            if (this.references.TryGetValue(идСсылки, out слабСсылка) && слабСсылка.TryGetTarget(out ссылка))
            {
                return((ПеречислениеСсылка)ссылка);
            }

            ссылка = new ПеречислениеСсылка(this.bromClient, узелМетаданных.Имя(), указатель, синоним);

            this.references[идСсылки] = new WeakReference <Ссылка>(ссылка);
            return((ПеречислениеСсылка)ссылка);
        }
        /// <summary>
        /// Создает ссылку на объект.
        /// </summary>
        /// <param name="полноеИмяТипа">Полное имя типа объекта, например "Справочник.Номенклатура".</param>
        /// <param name="указатель">Уникальный идентификатор ссылки.</param>
        /// <returns>Возвращает ссылку на объект.</returns>
        public ОбъектСсылка ПолучитьОбъектСсылку(string полноеИмяТипа, Guid указатель)
        {
            УзелМетаданных узелМетаданных;

            if (!this.Клиент.Метаданные.ПопыткаПолучить(полноеИмяТипа, out узелМетаданных))
            {
                throw new ArgumentException(String.Format("Ошибка при получении ссылки на объект. Не удалось обнаружить объект метаданных \"{0}\".", полноеИмяТипа), "полноеИмяТипа");
            }

            Guid   идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(полноеИмяТипа, указатель.ToString());
            Ссылка ссылка   = null;

            WeakReference <Ссылка> слабСсылка = null;

            if (this.references.TryGetValue(идСсылки, out слабСсылка) && слабСсылка.TryGetTarget(out ссылка))
            {
                return((ОбъектСсылка)ссылка);
            }

            switch (((МетаданныеОбъект)узелМетаданных).ТипКоллекции())
            {
            case ТипКоллекции.Справочник:
                ссылка = new СправочникСсылка(this.bromClient, узелМетаданных.Имя(), указатель);
                break;

            case ТипКоллекции.Документ:
                ссылка = new ДокументСсылка(this.bromClient, узелМетаданных.Имя(), указатель);
                break;

            case ТипКоллекции.ПланВидовХарактеристик:
                ссылка = new ПланВидовХарактеристикСсылка(this.bromClient, узелМетаданных.Имя(), указатель);
                break;

            case ТипКоллекции.ПланСчетов:
                ссылка = new ПланСчетовСсылка(this.bromClient, узелМетаданных.Имя(), указатель);
                break;

            case ТипКоллекции.ПланВидовРасчета:
                ссылка = new ПланВидовРасчетаСсылка(this.bromClient, узелМетаданных.Имя(), указатель);
                break;

            case ТипКоллекции.Задача:
                ссылка = new ЗадачаСсылка(this.bromClient, узелМетаданных.Имя(), указатель);
                break;

            case ТипКоллекции.БизнесПроцесс:
                ссылка = new БизнесПроцессСсылка(this.bromClient, узелМетаданных.Имя(), указатель);
                break;

            default:
                throw new Exception("Указан неверный тип коллекции.");
            }

            this.references[идСсылки] = new WeakReference <Ссылка>(ссылка);
            return((ОбъектСсылка)ссылка);
        }
        internal void УничтожитьСсылку(Ссылка ссылка)
        {
            Guid идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(ссылка);

            if (ссылка is ОбъектСсылка)
            {
                this.ОчиститьДанныеОбъекта(ссылка as ОбъектСсылка);
            }

            this.references.Remove(идСсылки);
        }
        private Dictionary <string, object> ПолучитьУзелДанныхОбъекта(ОбъектСсылка ссылка)
        {
            Guid идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(ссылка);

            Dictionary <string, object> node = null;

            if (!this.data.TryGetValue(идСсылки, out node))
            {
                node = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase);
                this.data.Add(идСсылки, node);
            }

            return(node);
        }
        private void УдалитьУзелДанныхОбъекта(ОбъектСсылка ссылка)
        {
            Guid идСсылки = КонтекстДанных.ПолучитьОбобщенныйИдентификаторСсылки(ссылка);

            this.data.Remove(идСсылки);
        }