/// <summary>
        /// Получает значение свойства объекта по ссылке на объект и имени свойства.
        /// </summary>
        /// <param name="ссылка">Ссылка на объект.</param>
        /// <param name="имяПоля">Имя поля.</param>
        /// <param name="значение">Значение поля.</param>
        /// <returns>Возвращает true, Если значение установлено, в противном случае - false.</returns>
        public bool ПопыткаПолучитьЗначение(ОбъектСсылка ссылка, string имяПоля, out object значение)
        {
            ссылка = ссылка ?? throw new ArgumentNullException("ссылка");

            if (имяПоля.Equals("Ссылка", StringComparison.OrdinalIgnoreCase))
            {
                значение = ссылка;
                return(true);
            }

            УзелМетаданных реквизит;

            if (((dynamic)ссылка.Метаданные()).еквизиты.ПопыткаНайтиПодчиненный(имяПоля, out реквизит))
            {
                if (ссылка.Пустая())
                {
                    значение = null;
                    return(true);
                }

                Dictionary <string, object> данныеОбъекта = this.ПолучитьУзелДанныхОбъекта(ссылка);
                if (данныеОбъекта.TryGetValue(имяПоля, out значение))
                {
                    return(true);
                }

                this.ЗагрузитьДанныеОбъекта(ссылка);
                return(ПопыткаПолучитьЗначение(ссылка, имяПоля, out значение));
            }

            if (((dynamic)ссылка.Метаданные()).ТабличныеЧасти.ПопыткаНайти(имяПоля, out реквизит))
            {
                if (ссылка.Пустая())
                {
                    значение = this.ПолучитьТабличнуюЧасть(ссылка, (МетаданныеТабличнаяЧасть)реквизит);
                    return(true);
                }

                Dictionary <string, object> данныеОбъекта = this.ПолучитьУзелДанныхОбъекта(ссылка);
                object таблЧасть;
                if (данныеОбъекта.TryGetValue(имяПоля, out таблЧасть))
                {
                    if (!(таблЧасть is ТабличнаяЧасть))
                    {
                        таблЧасть = this.ПолучитьТабличнуюЧасть(ссылка, (МетаданныеТабличнаяЧасть)реквизит);
                        данныеОбъекта[имяПоля] = таблЧасть;
                    }

                    значение = таблЧасть;
                    return(true);
                }

                this.ЗагрузитьДанныеОбъекта(ссылка);
                return(this.ПопыткаПолучитьЗначение(ссылка, имяПоля, out значение));
            }


            значение = null;
            return(false);
        }
        internal void УстановитьЗначенияИзСвойствSOAP(ОбъектСсылка ссылка, ValueBase[] properties)
        {
            if (properties == null)
            {
                return;
            }

            УзелМетаданных реквизиты = ссылка.Метаданные().НайтиПодчиненный("Реквизиты");
            УзелМетаданных таблЧасти = ссылка.Метаданные().НайтиПодчиненный("ТабличныеЧасти");

            foreach (ValueBase property in properties)
            {
                УзелМетаданных текМета;
                if (реквизиты.ПопыткаНайтиПодчиненный(property.Name, out текМета))
                {
                    object значение = property.GetValue(this.Клиент);
                    this.УстановитьЗначениеПоляОбъекта(ссылка, текМета.Имя(), значение);
                }
                else if (таблЧасти.ПопыткаНайтиПодчиненный(property.Name, out текМета))
                {
                    object значение = property.GetValue(this.Клиент);
                    if (значение is ТаблицаЗначений)
                    {
                        ТабличнаяЧасть таблЧасть = this.ПолучитьТабличнуюЧасть(ссылка, (МетаданныеТабличнаяЧасть)текМета);
                        таблЧасть.ЗагрузитьДанные(значение as ТаблицаЗначений);
                    }
                }
            }
        }
        private void ИнициализироватьДанныеОбъекта(ОбъектСсылка ссылка)
        {
            Dictionary <string, object> данныеОбъекта = ПолучитьУзелДанныхОбъекта(ссылка);

            данныеОбъекта.Clear();

            УзелМетаданных реквизиты = ссылка.Метаданные().НайтиПодчиненный("Реквизиты");

            foreach (var ключЗначение in реквизиты)
            {
                данныеОбъекта[ключЗначение.Key] = null;
            }
            данныеОбъекта["#"] = null;
        }