Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

331/ Сбор информации об окружении #359

Merged
merged 4 commits into from
May 25, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!-- Важно: Пожалуйста, перед созданием PR создайте проблему (issue) -->
<!-- Любые изменения необходимо описать и при необходимостиобсудить, прежде чем продолжить. Невыполнение этого требования может привести к отклонению запроса на включение. -->
<!-- Любые изменения необходимо описать и при необходимости обсудить, прежде чем продолжить. Невыполнение этого требования может привести к отклонению запроса на включение. -->

## Описание изменний
## Описание изменений

<!-- Разместите здесь краткое описание изменений -->

Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"помогаторы",
"пресетов",
"Регистронезависимое",
"реквеста",
"релизный",
"Сериализатор",
"сериализацию",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,47 +70,12 @@

КорневойКаталог = ЮТФайлы.ОбъединитьПути(Результат, "..", "..", "..");
КаталогКомпонент = ЮТФайлы.ОбъединитьПути(КорневойКаталог, "ExtCompT");

ПараметрыТихойУстановки.РабочийКаталог = КаталогКомпонент;
Информация = Новый СистемнаяИнформация();
ОперационнаяСистема = Неопределено;
Архитектура = Неопределено;

Linux = "Linux";
Windows = "Windows";
MacOS = "MacOS";

//@skip-check bsl-variable-name-invalid
x86 = "i386";
//@skip-check bsl-variable-name-invalid
x64 = "x86_64";

ТипКлиентскойПлатформы = Информация.ТипПлатформы;

Если ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86 Тогда
ОперационнаяСистема = Linux;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86_64 Тогда
ОперационнаяСистема = Linux;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86 Тогда
ОперационнаяСистема = Windows;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86_64 Тогда
ОперационнаяСистема = Windows;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86_64 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x64;
Иначе
ЮТИсполнительСлужебныйКлиент.ОбработкаОшибки("Неподдерживаемый тип платформы");
КонецЕсли;

ПараметрыТихойУстановки.ОперационнаяСистема = ОперационнаяСистема;
ПараметрыТихойУстановки.Архитектура = Архитектура;
ОписаниеПлатформы = ЮТОкружениеСлужебныйКлиентСервер.Платформа(Новый СистемнаяИнформация());
ПараметрыТихойУстановки.ОперационнаяСистема = ОписаниеПлатформы.ОперационнаяСистема;
ПараметрыТихойУстановки.Архитектура = ОписаниеПлатформы.Архитектура;

ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыТихойУстановки);

КонецПроцедуры
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@

КонецФункции

Функция ВычислитьБезопасно(Выражение) Экспорт
Функция ВычислитьБезопасно(Выражение, Параметры = Неопределено) Экспорт

#Если НЕ ВебКлиент И НЕ ТонкийКлиент Тогда
УстановитьБезопасныйРежим(Истина);
Expand All @@ -152,29 +152,25 @@

КонецФункции

Функция ВызватьФункцию(ПолноеИмяМетода, Параметры, Безопасно = Истина) Экспорт
Функция ВызватьФункциюКонфигурацииНаСервере(ИмяМодуля, ИмяМетода, Параметры = Неопределено) Экспорт

Выражение = СтрокаВызоваМетода(ПолноеИмяМетода, Параметры);
Если НЕ ЮТСтроки.ЭтоВалидноеИмяПеременной(ИмяМодуля) Тогда
ВызватьИсключение "Передано невалидное имя общего модуля в `ЮТМетодыСлужебный.ВызватьФункциюКонфигурацииНаСервере`";
КонецЕсли;

#Если НЕ ВебКлиент И НЕ ТонкийКлиент Тогда
Если Безопасно Тогда
УстановитьБезопасныйРежим(Истина);
Попытка
Значение = Вычислить(Выражение);
Исключение
УстановитьБезопасныйРежим(Ложь);
ВызватьИсключение;
КонецПопытки;
УстановитьБезопасныйРежим(Ложь);
Иначе
//@skip-check server-execution-safe-mode
Значение = Вычислить(Выражение);
Если НЕ ЮТСтроки.ЭтоВалидноеИмяПеременной(ИмяМетода) Тогда
ВызватьИсключение "Передано невалидное имя метода в `ЮТМетодыСлужебный.ВызватьФункциюКонфигурацииНаСервере`";
КонецЕсли;
#Иначе
Значение = Вычислить(Выражение);
#КонецЕсли

Возврат Значение;
Возврат ЮТОбщийСлужебныйВызовСервера.ВызватьФункциюКонфигурацииНаСервере(ИмяМодуля, ИмяМетода, Параметры);

КонецФункции

Функция ВызватьФункцию(ПолноеИмяМетода, Параметры, Безопасно = Истина) Экспорт

Выражение = СтрокаВызоваМетода(ПолноеИмяМетода, Параметры);

Возврат ВычислитьБезопасно(Выражение, Параметры);

КонецФункции

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,14 @@

КонецФункции

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

ПолноеИмяМетода = ЮТСтроки.ДобавитьСтроку(ИмяМодуля, ИмяМетода, ".");

Возврат ЮТМетодыСлужебный.ВызватьФункцию(ПолноеИмяМетода, Параметры, Истина);

КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//

#Область СлужебныйПрограммныйИнтерфейс

// Собирает информацию об окружения, как сервера, так и клиента.
//
// Возвращаемое значение:
// Структура - Описание окружения:
// * ВерсияПлатформы - Строка
// * ФайловаяБаза - Булево
// * ОбычноеПриложение - Булево
// * ВебКлиент - Булево
// * ТолстыйКлиент - Булево
// * ЛокальПлатформы - Строка
// * ЛокальИнтерфейса - Строка
// * ОперационнаяСистемаКлиент - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураКлиент - Строка - Возможные значения: x86_64, i386
// * ОперационнаяСистемаСервер - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураСервер - Строка - Возможные значения: x86_64, i386
// * ВстроенныйЯзык - Строка - Возможные значения: ru, en
// * ИнформационнаяСреда - Строка
Функция ОписаниеОкружения() Экспорт

СистемнаяИнформация = Новый СистемнаяИнформация();
ОписаниеСерверногоОкружения = ЮТМетодыСлужебный.ВызватьФункциюКонфигурацииНаСервере("ЮТОкружениеСлужебныйКлиентСервер",
"ОписаниеСерверногоОкружения");

Окружение = Новый Структура;
Окружение.Вставить("Конфигурация", ОписаниеСерверногоОкружения.Конфигурация);
Окружение.Вставить("ВерсияКонфигурации", ОписаниеСерверногоОкружения.ВерсияКонфигурации);
Окружение.Вставить("ВерсияПлатформы", СистемнаяИнформация.ВерсияПриложения);
Окружение.Вставить("ИнформационнаяСреда", "DEV");
Окружение.Вставить("ТестовыйДвижок", ОписаниеСерверногоОкружения.ТестовыйДвижок);
Окружение.Вставить("ВерсияТестовогоДвижка", ОписаниеСерверногоОкружения.ВерсияТестовогоДвижка);

Окружение.Вставить("ЛокальПлатформы", ЛокальПлатформы());
Окружение.Вставить("ЛокальИнтерфейса", ЛокальИнтерфейса());
Окружение.Вставить("ВстроенныйЯзык", ОписаниеСерверногоОкружения.ВстроенныйЯзык);

Платформа = Платформа(СистемнаяИнформация);
Окружение.Вставить("ОперационнаяСистемаКлиент", Платформа.ОперационнаяСистема);
Окружение.Вставить("АрхитектураКлиент", Платформа.Архитектура);

Окружение.Вставить("ОперационнаяСистемаСервер", ОписаниеСерверногоОкружения.ОперационнаяСистема);
Окружение.Вставить("АрхитектураСервер", ОписаниеСерверногоОкружения.Архитектура);

Окружение.Вставить("ФайловаяБаза", ЭтоФайловаяБаза());
Окружение.Вставить("ОбычноеПриложение", Ложь);
Окружение.Вставить("ВебКлиент", Ложь);
Окружение.Вставить("ТолстыйКлиент", Ложь);

#Если ВебКлиент Тогда
Окружение.ВебКлиент = Истина;
#ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда
Окружение.ОбычноеПриложение = Истина;
Окружение.ТолстыйКлиент = Истина;
#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда
Окружение.ТолстыйКлиент = Истина;
#КонецЕсли

//@skip-check use-non-recommended-method
Окружение.Вставить("ВремяЗапуска", ТекущаяДата());
alkoleft marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Используйте "ТекущаяДатаСеанса" вместо устаревшего "ТекущаяДата" Why is this an issue?

BUG Bug  MAJOR Major  :hourglass: 5min effort


//@skip-check constructor-function-return-section
Возврат Окружение;

КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура Инициализация(ПараметрыЗапуска) Экспорт

Окружение = ОписаниеОкружения();
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("Окружение", Окружение, Истина);

КонецПроцедуры

Функция ЭтоФайловаяБаза()

Возврат СтрНайти(Врег(СтрокаСоединенияИнформационнойБазы()), "FILE=") = 0;

КонецФункции

Функция Платформа(СистемнаяИнформация) Экспорт

ОперационнаяСистема = Неопределено;
Архитектура = Неопределено;

Linux = "Linux";
Windows = "Windows";
MacOS = "MacOS";

//@skip-check bsl-variable-name-invalid
x86 = "i386";
//@skip-check bsl-variable-name-invalid
x64 = "x86_64";

ТипКлиентскойПлатформы = СистемнаяИнформация.ТипПлатформы;

Если ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86 Тогда
ОперационнаяСистема = Linux;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86_64 Тогда
ОперационнаяСистема = Linux;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86 Тогда
ОперационнаяСистема = Windows;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86_64 Тогда
ОперационнаяСистема = Windows;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86_64 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x64;
Иначе
ВызватьИсключение "Неподдерживаемый тип платформы";
КонецЕсли;

Возврат Новый Структура("ОперационнаяСистема, Архитектура", ОперационнаяСистема, Архитектура);

КонецФункции

#Если Сервер Тогда
Функция ОписаниеСерверногоОкружения() Экспорт

СистемнаяИнформация = Новый СистемнаяИнформация();
Платформа = Платформа(СистемнаяИнформация);

Окружение = Новый Структура;
Окружение.Вставить("ОперационнаяСистема", Платформа.ОперационнаяСистема);
Окружение.Вставить("Архитектура", Платформа.Архитектура);

ЭтоРусскийВстроенныйЯзык = Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский;
Окружение.Вставить("ВстроенныйЯзык", Формат(ЭтоРусскийВстроенныйЯзык, "БЛ=en; БИ=ru;"));

Расширение = Метаданные.ОбщиеМодули.ЮТОкружениеСлужебныйКлиентСервер.РасширениеКонфигурации();
Окружение.Вставить("ТестовыйДвижок", Расширение.Имя);
Окружение.Вставить("ВерсияТестовогоДвижка", Расширение.Версия);
Окружение.Вставить("Конфигурация", Метаданные.Представление());
Окружение.Вставить("ВерсияКонфигурации", Метаданные.Версия);

Возврат Окружение;

КонецФункции
#КонецЕсли

Функция ЛокальИнтерфейса()

#Если Клиент Тогда
Возврат ТекущийЯзык();
#Иначе
Возврат ТекущийЯзык().КодЯзыка;
#КонецЕсли

КонецФункции

Функция ЛокальПлатформы()

Возврат ТекущийЯзыкСистемы();

КонецФункции

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f53b66d1-d3a6-48ff-86e3-d684d219a58d">
<name>ЮТОкружениеСлужебныйКлиентСервер</name>
<synonym>
<key>ru</key>
<value>Окружение служебный</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
Loading
Loading