/// <summary>
        /// Разбор
        /// </summary>
        /// <param name="value"></param>
        /// <param name="v"></param>
        /// <returns></returns>
        static public FunctionForControls Parse(string value, ICSSoft.STORMNET.View v)
        {
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
            doc.LoadXml(value);
            ICSSoft.STORMNET.FunctionalLanguage.FunctionalLanguageDef lang = ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.LanguageDef;
            ICSSoft.STORMNET.FunctionalLanguage.VariableDef[]         vars;
            ArrayList arvars = new ArrayList();

            arvars.Add(new ICSSoft.STORMNET.FunctionalLanguage.VariableDef((lang as ICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef).GuidType, "STORMMainObjectKey"));
            foreach (ICSSoft.STORMNET.PropertyInView piv in v.Properties)
            {
                System.Type propType = ICSSoft.STORMNET.Information.GetPropertyType(v.DefineClassType, piv.Name);
                try
                {
                    ICSSoft.STORMNET.FunctionalLanguage.ObjectType t = lang.GetObjectTypeForNetType(propType);
                    if (t != null)
                    {
                        arvars.Add(new ICSSoft.STORMNET.FunctionalLanguage.VariableDef(t, piv.Name, piv.Caption));
                    }
                }
                catch
                { }
            }

            vars = (ICSSoft.STORMNET.FunctionalLanguage.VariableDef[])arvars.ToArray(typeof(ICSSoft.STORMNET.FunctionalLanguage.VariableDef));
            ICSSoft.STORMNET.FunctionalLanguage.Function fnc = FromXMLElements((System.Xml.XmlElement)doc.FirstChild, lang, vars);
            FunctionForControls res = null;

            if (fnc == null)
            {
                res = new FunctionForControls(v, fnc);
            }
            else
            {
                res = new FunctionForControls(v, fnc.FunctionDef, fnc.Parameters.ToArray());
            }

            try
            {
                res.Name = ((System.Xml.XmlElement)doc.FirstChild).GetAttribute("___Name");
            }
            catch { }
            return(res);
        }
        private static ICSSoft.STORMNET.FunctionalLanguage.Function FromXMLElements(System.Xml.XmlElement elem, ICSSoft.STORMNET.FunctionalLanguage.FunctionalLanguageDef lang, ICSSoft.STORMNET.FunctionalLanguage.VariableDef[] vars)
        {
            string funcname = elem.GetAttribute("Name");

            object[] parameters = new object[elem.ChildNodes.Count];
            for (int i = 0; i < elem.ChildNodes.Count; i++)
            {
                System.Xml.XmlElement subel = (System.Xml.XmlElement)elem.ChildNodes[i];
                switch (subel.Name)
                {
                case "Function":
                    parameters[i] = FromXMLElements(subel, lang, vars);
                    break;

                case "Variable":
                    string varName = subel.GetAttribute("Value");
                    foreach (ICSSoft.STORMNET.FunctionalLanguage.VariableDef vd in vars)
                    {
                        if (vd.StringedView == varName)
                        {
                            parameters[i] = vd;
                            break;
                        }
                    }

                    break;

                case "Value":
                {
                    string typename = subel.GetAttribute("ConstType");
                    parameters[i] = null;
                    foreach (ICSSoft.STORMNET.FunctionalLanguage.ObjectType ot in lang.Types)
                    {
                        if (ot.StringedView == typename)
                        {
                            try
                            {
                                parameters[i] = Convert.ChangeType(subel.GetAttribute("Value"), ot.NetCompatibilityType);
                                break;
                            }
                            catch { }
                        }
                    }

                    if (parameters[i] == null)
                    {
                        parameters[i] = subel.GetAttribute("Value");
                    }

                    break;
                }
                }
                ;
            }

            if (funcname == null || funcname == string.Empty)
            {
                return(null);
            }
            else
            {
                return(lang.GetFunction(funcname, parameters));
            }
        }