void InitializeSelectedDB()
		{
			Descriptors = new ObservableCollection<DescriptorViewModel>();
			foreach (var descriptor in SelectedDatabase.Descriptors)
			{
				var binObjectViewModel = new DescriptorViewModel(descriptor, this);
				Descriptors.Add(binObjectViewModel);
			}
			SelectedDescriptor = Descriptors.FirstOrDefault();

			foreach (var descriptorViewModel in Descriptors)
			{
				descriptorViewModel.InputDescriptors = new ObservableCollection<DescriptorViewModel>();
				foreach (var inputBase in descriptorViewModel.Descriptor.XBase.InputXBases)
				{
					foreach (var gkDatabase in DescriptorsManager.GkDatabases)
					{
						var inputDescriptor = gkDatabase.Descriptors.FirstOrDefault(x => x.XBase.BaseUID == inputBase.BaseUID);
						if (inputDescriptor != null)
						{
							var inputDescriptorViewModel = Descriptors.FirstOrDefault(x => x.Descriptor.XBase.BaseUID == inputDescriptor.XBase.BaseUID);
							descriptorViewModel.InputDescriptors.Add(inputDescriptorViewModel);
						}
					}
				}
			}

			foreach (var descriptorViewModel in Descriptors)
			{
				descriptorViewModel.OutputDescriptors = new ObservableCollection<DescriptorViewModel>();
				foreach (var outputBase in descriptorViewModel.Descriptor.XBase.OutputXBases)
				{
					foreach (var gkDatabase in DescriptorsManager.GkDatabases)
					{
						var outputDescriptor = gkDatabase.Descriptors.FirstOrDefault(x => x.XBase.BaseUID == outputBase.BaseUID);
						if (outputDescriptor != null)
						{
							var outputDescriptorViewModel = Descriptors.FirstOrDefault(x => x.Descriptor.XBase.BaseUID == outputDescriptor.XBase.BaseUID);
							descriptorViewModel.OutputDescriptors.Add(outputDescriptorViewModel);
						}
					}
				}
			}

			foreach (var descriptorViewModel in Descriptors)
			{
				descriptorViewModel.InitializeLogic();
			}
		}
		void InitializeSelectedDB()
		{
			Descriptors = new ObservableCollection<DescriptorViewModel>();
			foreach (var descriptor in SelectedDatabase.Descriptors)
			{
				var descriptorViewModel = new DescriptorViewModel(descriptor, this);
				Descriptors.Add(descriptorViewModel);
			}
			SelectedDescriptor = Descriptors.FirstOrDefault();

			foreach (var descriptorViewModel in Descriptors)
			{
				descriptorViewModel.InputDescriptors = new ObservableCollection<DescriptorViewModel>();
				if (descriptorViewModel.Descriptor.GKBase.InputDescriptors != null)
					foreach (var inputBase in descriptorViewModel.Descriptor.GKBase.InputDescriptors)
					{
						var inputDescriptor = SelectedDatabase.Descriptors.FirstOrDefault(x => x.GKBase.UID == inputBase.UID);
						if (inputDescriptor != null)
						{
							var inputDescriptorViewModel = Descriptors.FirstOrDefault(x => x.Descriptor.GKBase.UID == inputDescriptor.GKBase.UID);
							if (inputDescriptorViewModel != null)
								descriptorViewModel.InputDescriptors.Add(inputDescriptorViewModel);
							else
							{
								descriptorViewModel.IsFormulaInvalid = true;
								MessageBoxService.ShowError("Отсутствует ссылка на входную зависимость" + descriptorViewModel.Descriptor.GKBase.GKDescriptorNo + " " + descriptorViewModel.Descriptor.GKBase.PresentationName);
							}
						}
					}
			}

			foreach (var descriptorViewModel in Descriptors)
			{
				descriptorViewModel.OutputDescriptors = new ObservableCollection<DescriptorViewModel>();
				if (descriptorViewModel.Descriptor.GKBase.InputDescriptors != null)
					foreach (var outputBase in descriptorViewModel.Descriptor.GKBase.OutputDescriptors)
					{
						var outputDescriptor = SelectedDatabase.Descriptors.FirstOrDefault(x => x.GKBase.UID == outputBase.UID);
						if (outputDescriptor != null)
						{
							var outputDescriptorViewModel = Descriptors.FirstOrDefault(x => x.Descriptor.GKBase.UID == outputDescriptor.GKBase.UID);
							if (outputDescriptorViewModel != null)
								descriptorViewModel.OutputDescriptors.Add(outputDescriptorViewModel);
							else
							{
								descriptorViewModel.IsFormulaInvalid = true;
								MessageBoxService.ShowError("Отсутствует ссылка на выходную зависимость" + descriptorViewModel.Descriptor.GKBase.GKDescriptorNo + " " + descriptorViewModel.Descriptor.GKBase.PresentationName);
							}
						}
					}
			}

			foreach (var descriptorViewModel in Descriptors)
			{
				descriptorViewModel.InitializeLogic();
			}

			var stringBuilder = new StringBuilder();
			foreach (var descriptorViewModel in Descriptors)
			{
				if (descriptorViewModel.IsFormulaInvalid)
				{
					stringBuilder.AppendLine(descriptorViewModel.Descriptor.GKBase.GKDescriptorNo + " " + descriptorViewModel.Descriptor.GKBase.PresentationName);
				}
				descriptorViewModel.InitializeLogic();
			}
			if(stringBuilder.Length > 0)
			{
				MessageBoxService.ShowWarning(stringBuilder.ToString(), "В результате компиляции возникли ошибки");
			}
		}