• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Совместимость разных версий Компаса

Автор CelestialAngel, 04.07.24, 17:14:24

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

CelestialAngel

Добрый день коллеги! Прошу помочь новичку.
Вопрос таков: совместим ли метод IDocuments.Open() из интерфейса IKompasDocument со старыми версиями компаса, если же нет, то какой лучше использовать для открытия файлов компаса?
Контекст вопроса: есть небольшое приложение, которое создает объект компаса (приложение), циклично открывает документ компаса, производит определенные манипуляции, закрывает документ компаса, а после всех действий сам объект компаса (приложение).
Приложение тестировалось на Компас 3д 21 и Компас 3д 20, но при работе с Компасом 12-ой версии стали сыпатся исключении на попытках открыть документы (на строке из метода OpenKompasFile:  IKompasDocument doc = app7.Documents.Open(filePath, false, false); ). К сожалению показать лог исключений не могу.

Код с используемыми методами создания объекта компаса и открытия файлов, если надо:
Цитата: undefinedprivate void CreateKompas()
        {
            Program.WriteToLog("Проверка запущен ли компас...");
            try
            {
                kompas = Marshal.GetActiveObject(objectName) as KompasObject;
                if (kompas != null)
                {
                    Program.WriteToLog("Компас уже запущен, используем существующий объект.");
                    kompas.Visible = true;
                    progWorkType = ProgWorkType.NotCloseKompas;

                    Program.WriteToLog($"Вариант работы программы - {progWorkType}");
                }
                else
                {
                    throw new Exception("Полученный объект компаса равен null.");
                }
            }
            catch (COMException)
            {
                Program.WriteToLog("Компас не запущен. Создаем новый объект компаса.");
                try
                {
                    Type? type = Type.GetTypeFromProgID(objectName) ?? throw new Exception("Не удалось получить Type из ProgID.");
                    kompas = Activator.CreateInstance(type) as KompasObject;
                    if (kompas != null)
                    {
                        kompas.Visible = false;
                        progWorkType = ProgWorkType.CloseKompasAlways;

                        Program.WriteToLog($"Вариант работы программы - {progWorkType}");
                    }
                    else
                    {
                        throw new Exception("Созданный объект компаса равен null.");
                    }
                }
                catch (Exception ex)
                {
                    Program.WriteToLog($"Ошибка при создании объекта компаса: {ex.Message}");
                    throw;
                }
            }
            catch (Exception ex)
            {
                Program.WriteToLog($"Ошибка при проверке запущен ли компас: {ex.Message}");
                throw;
            }
        }




        internal IKompasDocument OpenKompasFile(string filePath, KompasObject? kompas)
        {
            IApplication? kompas7 = kompas?.ksGetApplication7() as IApplication;

            Program.WriteToLog("IApplication? kompas7 получен");
            if (kompas7 is not null)
            {
                var app7 = kompas7.Application;
                app7.Visible = progWorkType == ProgWorkType.NotCloseKompas;
                app7.HideMessage = ksHideMessageEnum.ksHideMessageNo;

                IKompasDocument doc = app7.Documents.Open(filePath, false, false);

                if (doc is null)
                {
                    Program.WriteToLog($"IKompasDocument doc ({filePath}) is null");
                    throw new Exception($"Ошибка открытия файла - '{filePath}'!");
                }
                else
                {
                    Program.WriteToLog($"Вернули doc для ({filePath})");
                    return doc;
                }
            }
            else
                throw new Exception("Ошибка валидации IApplication kompas7");
        }

Валерий Изранов

Вряд ли кто сейчас работает с Компасом 12-ой версии.
Вполне в программе можно ограничиться К16 или даже К18.

CelestialAngel

Цитата: Валерий Изранов от 04.07.24, 17:41:19Вряд ли кто сейчас работает с Компасом 12-ой версии.
Вполне в программе можно ограничиться К16 или даже К18.

К сожалению, у меня на работе, есть пользователи, у которых на ПК стоит только компас 12-ый  :(((

p3452

Если c API7 "проблемы", что мешает открывать через API5?

p/s: ...имея IApplication kompas7, зачем еще раз получать kompas7.Application...
+ Благодарностей: 1

Валерий Изранов

Компас 16 да и Компас 18 давно сняты с обслуживания АСКОНой.
И купить их можно за небольшие деньги.

Цитата: CelestialAngel от 04.07.24, 17:42:30К сожалению, у меня на работе, есть пользователи, у которых на ПК стоит только компас 12-ый  :(((
Жесть какая. Ему уже больше 15 лет...

CelestialAngel

Цитата: p3452 от 04.07.24, 17:45:31Если c API7 "проблемы", что мешает открывать через API5?

p/s: ...имея IApplication kompas7, зачем еще раз получать kompas7.Application...

зачем еще раз получать kompas7.Application...
Честно говоря даже не замечал что еще раз получаю Appplication , спасибо :)

Валерий Изранов

CelestialAngel, постарайтесь. Вы должны найти К18 по крайней мере.

CelestialAngel

Цитата: p3452 от 04.07.24, 17:45:31Если c API7 "проблемы", что мешает открывать через API5?

Можете написать, куда смотреть, чтобы понять через какой метод это все дело делается?

CelestialAngel

Цитата: Валерий Изранов от 04.07.24, 17:50:29CelestialAngel, постарайтесь. Вы должны найти К18 по крайней мере.

Полномочий устанавливать какой либо софт на работе у меня нету. Смежный отдел этим занимается.
Почему у юзеров все еще стоит 12-ый Компас я не знаю, учитывая что у нас есть большой набор лицензий...

Валерий Изранов

CelestialAngel, на своей работе вы недопустимо сильно отстали в использовании Компас.
Требуйте с соседнего отдела обновления. Иначе у вас будет беда.

p3452

Ссылка Открыть документ.png

ksDocument3D.Open(Файл, Видимость)
ksDocument2D.ksOpenDocument(Файл, Видимость)
ksSpcDocument.ksOpenDocument(Файл, Видимость)
ksDocumentTxt.ksOpenDocument(Файл, Видимость)
+ Благодарностей: 1

CelestialAngel


Vi2

Цитата: CelestialAngel от 04.07.24, 17:14:24при работе с Компасом 12-ой версии стали сыпатся исключении на попытках открыть документы (на строке из метода OpenKompasFile:  IKompasDocument doc = app7.Documents.Open(filePath, false, false); ). К сожалению показать лог исключений не могу.
Странно, обычно текст исключения виден, и уж показать, в чём там дело, нетрудно. Уберите секретные сведения, если уж на то пошло, оставив семантику.

PS
Иногда приложение использует файлы из своего состава, соответственно, они более  высокой версии, чем стоящий Компас. Такие файлы Компасом могут и не открываться. Или открываться с сообщениями, которые при их подавлении могут выливаться в ошибку открытия.


CelestialAngel

Цитата: Vi2 от 05.07.24, 08:01:52Странно, обычно текст исключения виден, и уж показать, в чём там дело, нетрудно. Уберите секретные сведения, если уж на то пошло, оставив семантику.

PS
Иногда приложение использует файлы из своего состава, соответственно, они более  высокой версии, чем стоящий Компас. Такие файлы Компасом могут и не открываться. Или открываться с сообщениями, которые при их подавлении могут выливаться в ошибку открытия.

Дело не в секретных данных, а в том, что логи хранятся локально на ПК юзеров, а этот конкретный юзер у которого был 12 Компас ушел в отпуск и получить логи я не могу.

Вроде как дело было в том, что пользователь пытался обработать в программе файлы, которые были созданы более в новой версии из-за этого сыпались исключения.

Vi2

Цитата: CelestialAngel от 08.07.24, 20:35:11Вроде как дело было в том, что пользователь пытался обработать в программе файлы, которые были созданы более в новой версии из-за этого сыпались исключения.

Ну это обычное дело, особенно при передаче между кем-то и кем-то.
И от этого панацеи нет.

PS
>Жесть какая. Ему уже больше 15 лет...
Работает - не трогай. Я лично пишу с ХР - тоже как лет 15 не поддерживается.