oscript-library / v8runner

Управление запуском 1С из командной строки
92 stars 55 forks source link

Возможность инициализации требуемой версии платформы 1С Предприятие и сообщение об ошибке в случае ее отсутствия #130

Open AlexPCRus opened 3 years ago

AlexPCRus commented 3 years ago

При использовании vanessa runner в случае если передаваемая в параметрах версия платформы отсутствует, то используется одна из других установленных версий, тогда как логичнее было бы выдавать сообщение об ошибке. Это происходит из-за того что при инициализации ищется любая установленная версия платформы 8.3.

EvilBeaver commented 3 years ago

Все ок, только не пойму, откуда столько сторонних изменений от @artbear и @nixel2007. Как сделать, чтобы в PR были только коммиты, присущие ему?

AlexPCRus commented 3 years ago

Все ок, только не пойму, откуда столько сторонних изменений от @artbear и @nixel2007. Как сделать, чтобы в PR были только коммиты, присущие ему?

Я базовую ветку менял, может в этом причина. Могу заново PR сделать, а этот закрыть.

EvilBeaver commented 3 years ago

Я проглядел конструктор. Да, не надо менять конструктор, лучше просто встроиться в стандартный функционал установки искомой версии.

AlexPCRus commented 3 years ago
  1. Я не совсем понимаю, где здесь сообщение об ошибке. Нет ни вывода лога, ни выброса исключения.
  2. Установка версии платформы есть через отдельный сеттер, не совсем понимаю, зачем это делать в конструкторе.
  3. Перед выполнением команд вызывается метод ПроверитьВозможностьВыполненияКоманды, который в том числе проверяет заполненность пути к платформе. Можно вынести из него проверку на заполненности пути к платформе в сеттер. Тогда можно будет не менять апи конструктора, просто сеттер по версии платформы начнет бросать исключение.

Дело в том, что инициализация выполняется командой Инициализация() внутри которой выполняется поиск любой установленной версии платформы 8.3 вне зависимости от того какая версия указана в параметрах. И если будет найдена любая установленная версия, а требуемой версии не будет установлено на компьютере, то для выполнения команд будет использована она, что противоречит переданным параметрам на мой взгляд. Если инициализировать переданной в параметрах версией сразу, то ошибку в случае ее отсутствия выкинет v8runner позже.

Может быть вместе с выводом в отладку кидать исключения прямо в инициализации? Лог.Ошибка("Не найдена платформа " + ВерсияПлатформы); ВызватьИсключение "Не найдена платформа " + ВерсияПлатформы; и вывод будет вроде этого: vanessa-runner v1.10.0 ОТЛАДКА - [oscript.lib.v8runner] - Ищу платформу 8.3.20 ОШИБКА - [oscript.lib.v8runner] - Не найдена платформа 8.3.20 КРИТИЧНАЯОШИБКА - {Модуль C:\Program Files\OneScript\lib\vanessa-runner\oscript_modules\v8runner\src\v8runner.os / Ошибка в строке: 2154 / Не найдена платформа 8.3.20}

nixel2007 commented 3 years ago

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

я вот этот тезис не понимаю. vanessa-runner у экземпляра УправлениеКонфигуратором вызывает метод установки версии платформы. v8runner будет пытаться ее найти и если не найдет, сразу из сеттера выкинет исключение. откуда противоречие?

AlexPCRus commented 3 years ago

Пишу по памяти, прошу простить. Если ничего не путаю, то проблема в функции ПутьКПлатформе1С(Знач Путь = "") файла v8runner.os. Изначально при инициализации находится любая доступная версия 8.3, при этом путь сохраняется в переменной мПутьКПлатформе1С. В дальнейшем при вызове ПолучитьПутьКВерсииПлатформы если в качестве параметра передается Путь = "" (по памяти - это видимо случай когда конкретная версия не найдена) возвращается сохраненный ранее путь к некорректной версии платформы. И, соответственно, исключение не возникает, выполнение продолжается.

nixel2007 commented 3 years ago

но ведь vanessa runner всегда передает путь к платформе, если он указан в параметрах?

AlexPCRus commented 3 years ago

Может быть у меня не самый актуальный код. Я смотрю здесь:

**ИспользоватьВерсиюПлатформы**:
Процедура ИспользоватьВерсиюПлатформы(Знач МаскаВерсии, Знач Разрядность = Неопределено) Экспорт
    Путь = ПолучитьПутьКВерсииПлатформы(МаскаВерсии, Разрядность);
    ПутьКПлатформе1С(Путь);
КонецПроцедуры

**ПолучитьПутьКВерсииПлатформы**:
Функция ПолучитьПутьКВерсииПлатформы(Знач ВерсияПлатформы, Знач Разрядность = Неопределено) Экспорт
    Если Лев(ВерсияПлатформы, 2) <> "8." Тогда
        ВызватьИсключение "Неверная версия платформы <"+ ВерсияПлатформы + ">";
    КонецЕсли;
    ПутьКПредприятию = Платформа1С.ПутьКПредприятию(ВерсияПлатформы, Разрядность);
    Возврат ПутьКПредприятию;
КонецФункции

**ПутьКПредприятию**:
Функция ПутьКПредприятию(Знач НомерВерсии, Знач Разрядность = Неопределено) Экспорт
    Возврат ПутьКПриложению(НомерВерсии, ПриложенияПлатформы.Предприятие, Разрядность);
КонецФункции

**ПутьКПриложению**:
Функция ПутьКПриложению(Знач НомерВерсии, Знач ПриложениеПлатформы, Знач Разрядность)
    ПутьКФайлу = "";
    ВерсияПлатформы = ПолучитьВерсию(НомерВерсии, ПриложениеПлатформы, Разрядность);
    Если Не ВерсияПлатформы = Неопределено Тогда
    ПутьКФайлу = ВерсияПлатформы.ПутьКПриложению(ПриложениеПлатформы);
    КонецЕсли;
    Возврат ПутьКФайлу;
КонецФункции

отсюда видно кмк что Путь может быть пустым, если не будет найдена версия платформы.

AlexPCRus commented 3 years ago

Спасибо, что научили форматированию :)

artbear commented 3 years ago

Посыл ПР правильный, лучше выдавать исключение.

а вот с реализацией проблемы.

возможно, это связано с проблемой неверной инициализации переменной мПутьКПлатформе1С

вроде бы был такой ишуз, но я его не нашел (

AlexPCRus commented 3 years ago

Я малой кровью хотел :) Чтобы остальное не пострадало. Или нужно отказаться от установки пути при инициализации вовсе, и в любом случае вызывать функцию ИспользоватьВерсиюПлатформы или с переданным параметром или со значением по умолчанию (8.3), но если вносить такие изменения в v8runner, то возможно пострадают зависимые плагины, которые не рассчитывают на то, что нужно обязательно вызывать эту функцию.

artbear commented 3 months ago

Изначально при инициализации находится любая доступная версия 8.3, при этом путь сохраняется в переменной мПутьКПлатформе1С. В дальнейшем при вызове ПолучитьПутьКВерсииПлатформы если в качестве параметра передается Путь = "" (по памяти - это видимо случай когда конкретная версия не найдена) возвращается сохраненный ранее путь к некорректной версии платформы. И, соответственно, исключение не возникает, выполнение продолжается.

Подтверждаю указанные проблемы, нужно исправлять, правда, ПР их полностью не решает (

вообще хочу в ванесса-раннер сделать следующий тикет