/// <summary>
        /// Считывание описания.
        /// </summary>
        public int LoadDescription(out string errStr,
                                   string projectName, bool loadFromLua)
        {
            errStr = "";
            Logs.Clear();
            EProjectManager.GetInstance().ProjectDataIsLoaded = false;

            string LuaStr;
            int    res = 0;

            var oProgress = new Eplan.EplApi.Base.Progress("EnhancedProgress");

            oProgress.SetAllowCancel(false);
            oProgress.SetTitle("Считывание данных проекта");

            try
            {
                oProgress.BeginPart(15, "Считывание IO");
                projectConfiguration.ReadIO();
                oProgress.EndPart();

                oProgress.BeginPart(15, "Считывание устройств");
                if (projectConfiguration.DevicesIsRead == true)
                {
                    projectConfiguration.SynchronizeDevices();
                }
                else
                {
                    projectConfiguration.ReadDevices();
                }
                oProgress.EndPart();

                oProgress.BeginPart(25, "Считывание привязки устройств");
                projectConfiguration.ReadBinding();
                oProgress.EndPart();

                if (loadFromLua)
                {
                    EncodingDetector.MainFilesEncoding = null;

                    oProgress.BeginPart(15, "Считывание технологических " +
                                        "объектов");
                    res = LoadDescriptionFromFile(out LuaStr, out errStr,
                                                  projectName,
                                                  $"\\{ProjectDescriptionSaver.MainTechObjectsFileName}");
                    techObjectManager.LoadDescription(LuaStr, projectName);
                    errStr = "";
                    LuaStr = "";
                    res    = LoadDescriptionFromFile(out LuaStr, out errStr,
                                                     projectName,
                                                     $"\\{ProjectDescriptionSaver.MainRestrictionsFileName}");
                    techObjectManager.LoadRestriction(LuaStr);
                    oProgress.EndPart();
                }

                oProgress.BeginPart(15, "Проверка данных");
                projectConfiguration.Check();
                oProgress.EndPart();

                oProgress.BeginPart(15, "Расчет IO-Link");
                IOManager.CalculateIOLinkAdresses();
                oProgress.EndPart(true);
                EProjectManager.GetInstance().ProjectDataIsLoaded = true;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
                oProgress.EndPart(true);
                EProjectManager.GetInstance().ProjectDataIsLoaded = false;
            }

            return(res);
        }