Skip to content

Commit

Permalink
fixed bugs and smells
Browse files Browse the repository at this point in the history
  • Loading branch information
denisushakov committed Dec 10, 2024
1 parent a30f0e3 commit 76e0f74
Show file tree
Hide file tree
Showing 13 changed files with 377 additions and 219 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт

Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
Описание.Версия = "1.0.4.13";
Описание.Версия = "1.0.4.14";

// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,6 @@

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

// См. пбп_ОбщегоНазначенияСервер.ПереадресацияОбщегоМодуля
Функция ПереадресацияОбщегоМодуля(ИмяМодуляБСП, ИмяМодуляВстроенного) Экспорт

Возврат пбп_ОбщегоНазначенияПовтИсп.ПереадресацияОбщегоМодуля(ИмяМодуляБСП, ИмяМодуляВстроенного);

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

// См. пбп_ОбщегоНазначенияСервер.ТекущаяДатаПользователя
Функция ТекущаяДатаПользователя(ИмяПользователя = Неопределено) Экспорт

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonModule uuid="6534881d-6695-4307-b7c5-312a9ca9cc4b">
<Properties>
<Name>пбп_ОбщегоНазначенияКлиент</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Общего назначения клиент</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>true</ClientManagedApplication>
<Server>false</Server>
<ExternalConnection>false</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT 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.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

#Область УсловныеВызовы

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

Модуль = Вычислить(Имя);

#Если Не ВебКлиент Тогда

// В веб-клиенте не проверяется,
// т.к. при обращении к модулям с вызовом сервера типа такого модуля в веб-клиенте не существует.
Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
ВызватьИсключение пбп_ПереадресацияКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Общий модуль ""%1"" не существует.'"),
Имя);
КонецЕсли;

#КонецЕсли

Возврат Модуль;

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

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

#КонецОбласти
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,6 @@

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

// См. пбп_ОбщегоНазначенияСервер.ПереадресацияОбщегоМодуля.
//
Функция ПереадресацияОбщегоМодуля(ИмяМодуляБСП, ИмяМодуляВстроенного) Экспорт

Возврат пбп_ОбщегоНазначенияСервер.ПереадресацияОбщегоМодуля(ИмяМодуляБСП, ИмяМодуляВстроенного);

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

// См. пбп_ОбщегоНазначенияСервер.ПолучитьЗначениеКонстанты.
//
Функция ПолучитьЗначениеКонстанты(ИмяКонстанты) Экспорт
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -776,7 +776,7 @@
Если Метаданные.ОбщиеМодули.Найти("СтандартныеПодсистемыСервер") <> Неопределено Тогда
Попытка
УстановитьБезопасныйРежим(Истина);
МодульБСП = пбп_Переадресация.ОбщийМодуль("СтандартныеПодсистемыСервер");
МодульБСП = ОбщийМодуль("СтандартныеПодсистемыСервер");
ВерсияБСП = МодульБСП.ВерсияБиблиотеки();
Исключение
ВерсияБСП = Неопределено;
Expand All @@ -787,31 +787,6 @@

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

// Возвращает ссылку на общий модуль или модуль менеджера по имени. Если подключена БСП,
// происходит переадресация на общий модуль из БСП, иначе используются встроенные модули ПБП.
//
// Параметры:
// ИмяМодуляБСП - Строка - Имя Общего модуля из Библиотеки стандартных подсистем
// ИмяМодуляВстроенного - Строка - Имя Общего модуля из Проектной библиотеки подсистем
//
// Возвращаемое значение:
// ОбщийМодуль
// МодульМенеджераОбъекта
//
Функция ПереадресацияОбщегоМодуля(ИмяМодуляБСП, ИмяМодуляВстроенного = "") Экспорт

Имя = ИмяМодуляВстроенного;
Если пбп_ОбщегоНазначенияПовтИсп.СуществуетБиблиотекаСтандартныхПодсистем()
И Метаданные.ОбщиеМодули.Найти(ИмяМодуляБСП) <> Неопределено Тогда
Имя = ИмяМодуляБСП;
КонецЕсли;

Модуль = пбп_Переадресация.ОбщийМодуль(Имя);

Возврат Модуль;

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

#Область ПользовательскиеФункции

// Выполняет пользовательскую функцию с переданными параметрами.
Expand Down Expand Up @@ -911,6 +886,58 @@

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

#Область УсловныеВызовы

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

Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
// BSLLS:ExecuteExternalCodeInCommonModule-off
// ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно.
УстановитьБезопасныйРежим(Истина);
Модуль = Вычислить(Имя);
// BSLLS:ExecuteExternalCodeInCommonModule-on
ИначеЕсли СтрЧислоВхождений(Имя, ".") = 1 Тогда
Возврат СерверныйМодульМенеджера(Имя);
Иначе
Модуль = Неопределено;
КонецЕсли;

Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
ВызватьИсключение(пбп_ПереадресацияКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверное значение параметра %1 в %2. Общий модуль ""%1"" не существует.'"),
"Имя", "пбп_ОбщегоНазначенияСервер.ОбщийМодуль", Имя),
КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;

Возврат Модуль;

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

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

#КонецОбласти // ПрограммныйИнтерфейс

#Область СлужебныеПроцедурыИФункции
Expand Down Expand Up @@ -1131,4 +1158,103 @@

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

#Область УсловныеВызовы

// Возвращает серверный модуль менеджера по имени объекта.
Функция СерверныйМодульМенеджера(Имя)

Check failure on line 1164 in src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

View check run for this annotation

sonar.openbsl.ru qa-bot / 1C: Project SubSystems Library Sonarqube Results

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1164

Уменьшите когнитивную сложность "СерверныйМодульМенеджера" с 67 до 15

Check warning on line 1164 in src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

View check run for this annotation

sonar.openbsl.ru qa-bot / 1C: Project SubSystems Library Sonarqube Results

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1164

Добавьте описание возвращаемого значения функции

Check failure on line 1164 in src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

View check run for this annotation

sonar.openbsl.ru qa-bot / 1C: Project SubSystems Library Sonarqube Results

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1164

Уменьшите цикломатическую сложность "СерверныйМодульМенеджера" с 35 до 20

Check warning on line 1164 in src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

View check run for this annotation

sonar.openbsl.ru qa-bot / 1C: Project SubSystems Library Sonarqube Results

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1164

Необходимо добавить описание всех параметров метода
ОбъектНайден = Ложь;

ЧастиИмени = СтрРазделить(Имя, ".");
Если ЧастиИмени.Количество() = 2 Тогда

Check warning on line 1168 in src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

View check run for this annotation

sonar.openbsl.ru qa-bot / 1C: Project SubSystems Library Sonarqube Results

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L1168

Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.

ИмяВида = ВРег(ЧастиИмени[0]);
ИмяОбъекта = ЧастиИмени[1];

Если ИмяВида = ВРег("Константы") Тогда
Если Метаданные.Константы.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("РегистрыСведений") Тогда
Если Метаданные.РегистрыСведений.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("РегистрыНакопления") Тогда
Если Метаданные.РегистрыНакопления.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("РегистрыБухгалтерии") Тогда
Если Метаданные.РегистрыБухгалтерии.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("РегистрыРасчета") Тогда
Если Метаданные.РегистрыРасчета.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Справочники") Тогда
Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Документы") Тогда
Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Отчеты") Тогда
Если Метаданные.Отчеты.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Обработки") Тогда
Если Метаданные.Обработки.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("БизнесПроцессы") Тогда
Если Метаданные.БизнесПроцессы.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ЖурналыДокументов") Тогда
Если Метаданные.ЖурналыДокументов.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("Задачи") Тогда
Если Метаданные.Задачи.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ПланыСчетов") Тогда
Если Метаданные.ПланыСчетов.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ПланыОбмена") Тогда
Если Метаданные.ПланыОбмена.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ПланыВидовХарактеристик") Тогда
Если Метаданные.ПланыВидовХарактеристик.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
ИначеЕсли ИмяВида = ВРег("ПланыВидовРасчета") Тогда
Если Метаданные.ПланыВидовРасчета.Найти(ИмяОбъекта) <> Неопределено Тогда
ОбъектНайден = Истина;
КонецЕсли;
КонецЕсли;

КонецЕсли;

Если Не ОбъектНайден Тогда
ВызватьИсключение(пбп_ПереадресацияКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверное значение параметра %1 в функции %2. Объект метаданных ""%3"" не существует.'"),
"Имя", "пбп_ОбщегоНазначенияСервер.СерверныйМодульМенеджера", Имя),
КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;

// BSLLS:ExecuteExternalCodeInCommonModule-off
// ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно.
УстановитьБезопасныйРежим(Истина);
Модуль = Вычислить(Имя);
// BSLLS:ExecuteExternalCodeInCommonModule-on

Возврат Модуль;

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

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

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

0 comments on commit 76e0f74

Please sign in to comment.