/// <summary>
		/// 	Embeds the dependency.
		/// </summary>
		/// <param name="group"> The group. </param>
		/// <param name="target"> The target. </param>
		/// <param name="sources"> The sources. </param>
		/// <remarks>
		/// </remarks>
		private static void EmbedDependency(string group, ProcessThemaRef target, IEnumerable<ProcessThemaRef> sources) {
			if (target.Group.IsNotEmpty() && target.Group != group) {
				return;
			}
			var targetform = target.Thema.GetForm(group);
			if (null == targetform) {
				return;
			}
			foreach (var s in from s in sources
			                  where s.IsMatchGroup(@group)
			                  let sourceform = s.Thema.GetForm(@group)
			                  where null != sourceform
			                  select s) {
				targetform.Add(new XElement("lockdepend", new XAttribute("code", s.Thema.Code + "." + @group + ".in")));
			}
		}
		/// <summary>
		/// 	Adds the element from XML.
		/// </summary>
		/// <param name="e"> The e. </param>
		/// <remarks>
		/// </remarks>
		private void AddElementFromXml(XElement e) {
			var process = new Process();
			e.Apply(process);
			process.Xml = e;
			if (process.Code.IsEmpty()) {
				Errors.Add(
					new EcoProcessException("Процессу " + e.Describe().ToWhereString() + " не сопоставлен исполнительный узел",
					                        process.Xml));
				return;
			}
			process.OrgNodeCode = e.Attr("orgnode");
			if (e.Parent != null && e.Parent.Name.LocalName == "orgnode") {
				process.OrgNodeCode = e.Parent.Id();
			}
			if (process.OrgNodeCode.IsEmpty()) {
				Errors.Add(
					new EcoProcessException("Процессу " + process.Code + " не сопоставлен исполнительный узел", process.Xml));
				return;
			}
			foreach (var t in e.Elements("thema")) {
				var themaref = new ProcessThemaRef();
				t.Apply(themaref);
				if (themaref.Code.IsEmpty()) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет путсую ссылку на тему ", process.Xml)
						);
					continue;
				}
				if (null != process.ThemaRefs.FirstOrDefault(x => x.Code == themaref.Code)) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет двойную ссылку на тему " + themaref.Code, process.Xml));
					continue;
				}
				if (themaref.OutLock && !themaref.OutView) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет неверную ссылку на тему " + themaref.Code +
						                        " - тема помечена к блокировке, но к экспорту", process.Xml));
					continue;
				}
				process.ThemaRefs.Add(themaref);
			}
			foreach (var p in e.Elements("in")) {
				var processin = new ProcessInRef();
				p.Apply(processin);
				processin.Xml = p;
				if (processin.Code.IsEmpty()) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет путсую ссылку процесс", process.Xml));
					continue;
				}
				if (null != process.InDepends.FirstOrDefault(x => x.Code == processin.Code)) {
					Errors.Add(
						new EcoProcessException("Процесс " + process.Code + " имеет двойную ссылку на процесс " + processin.Code,
						                        process.Xml));
					continue;
				}
				process.InDepends.Add(processin);
			}
			Add(process);
		}