Skip to content

Commit

Permalink
Merge pull request #359 from bia-technologies/feature/331
Browse files Browse the repository at this point in the history
331/ Сбор информации об окружении
  • Loading branch information
alkoleft committed May 25, 2024
2 parents 4e55456 + bff329f commit 05ea150
Show file tree
Hide file tree
Showing 18 changed files with 386 additions and 69 deletions.
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
Окружение.Вставить("ВремяЗапуска", ТекущаяДата()); // BSLLS:DeprecatedCurrentDate-off

//@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

0 comments on commit 05ea150

Please sign in to comment.