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

Feature/predefined id unique check 92 #118

Merged
merged 14 commits into from
Oct 18, 2024
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

Comment on lines +39 to 42
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

Incomplete refactoring detected: Old server-side method still referenced.

The method ЗаполнитьПредопределенныеНаСервере is still present in Module.bsl, indicating that the refactoring to client-side processing may be incomplete. Additionally, there are multiple implementations of СоздатьОбновитьПредопределенныеЗначения, which could lead to maintenance challenges.

  • Ensure that all references to ЗаполнитьПредопределенныеНаСервере are removed or appropriately replaced.
  • Review the implementations of СоздатьОбновитьПредопределенныеЗначения to consolidate and prevent redundancy.
🔗 Analysis chain

Verify the completeness and security of the client-side implementation.

The change from server-side to client-side processing of predefined values is a significant alteration. While this can improve performance by reducing server calls, it's crucial to ensure that all scenarios are properly handled and that there are no security implications.

Please address the following points:

  1. Confirm that пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект) covers all use cases previously handled by ЗаполнитьПредопределенныеНаСервере().
  2. Verify that moving this logic to the client side doesn't introduce any security vulnerabilities.
  3. Ensure that any side effects or additional logic that might have been present in the server-side method are accounted for in the new implementation.
  4. Consider adding error handling to manage potential failures during the client-side operation.

To assist in verifying the changes, you can run the following script to check for any remaining references to the old server-side method and to locate the implementation of the new client-side method:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for references to old method and locate new method implementation

# Search for any remaining references to ЗаполнитьПредопределенныеНаСервере
echo "Checking for references to ЗаполнитьПредопределенныеНаСервере:"
rg --type bsl "ЗаполнитьПредопределенныеНаСервере"

# Locate the implementation of СоздатьОбновитьПредопределенныеЗначения
echo "Locating implementation of СоздатьОбновитьПредопределенныеЗначения:"
rg --type bsl "Процедура СоздатьОбновитьПредопределенныеЗначения"

Length of output: 695


Script:

#!/bin/bash
# Description: Check for references to ЗаполнитьПредопределенныеНаСервере and locate implementation of СоздатьОбновитьПредопределенныеЗначения in .bsl files

# Search for any remaining references to ЗаполнитьПредопределенныеНаСервере in .bsl files
echo "Checking for references to ЗаполнитьПредопределенныеНаСервере in .bsl files:"
rg --glob '*.bsl' "ЗаполнитьПредопределенныеНаСервере"

# Locate the implementation of СоздатьОбновитьПредопределенныеЗначения in .bsl files
echo "Locating implementation of СоздатьОбновитьПредопределенныеЗначения in .bsl files:"
rg --glob '*.bsl' "Процедура СоздатьОбновитьПредопределенныеЗначения"

Length of output: 1138

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ПередЗаписью(Отказ)
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Suggestion: Use 'СуществуетСвойство' method for clarity

For better readability and to directly check the existence of the "ЭтоНовый" property, consider using the СуществуетСвойство method of the ДополнительныеСвойства structure:

Если Не ДополнительныеСвойства.СуществуетСвойство("ЭтоНовый") Тогда

This makes the code more intuitive and eliminates the need for the external utility function.

Apply this diff to implement the suggestion:

-	Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
+	Если Не ДополнительныеСвойства.СуществуетСвойство("ЭтоНовый") Тогда

РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.ОбновитьХешЭлемента(ЭтотОбъект.Ссылка, ЭтотОбъект.ЭтоГруппа);
КонецЕсли;
КонецПроцедуры
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

⚠️ Potential issue

Condition in ПриЗаписи is Redundant and Always False

The condition checking for the absence of the "ЭтоНовый" property in ДополнительныеСвойства within the ПриЗаписи procedure is always false since ПередЗаписью consistently sets this property and there are no modifications elsewhere that alter it between these events.

🔗 Analysis chain

Verify the condition in 'ПриЗаписи' procedure regarding 'ЭтоНовый' property

In the ПриЗаписи (OnWrite) procedure, the condition checks if the "ЭтоНовый" property does not exist in ДополнительныеСвойства:

Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда

Since ПередЗаписью adds this property, this condition may never be true unless ДополнительныеСвойства is modified elsewhere between these events. Consider verifying whether the intention is to check the value of "ЭтоНовый" or to handle scenarios where ДополнительныеСвойства might not include this property.

Run the following script to identify any modifications to ДополнительныеСвойства that could affect the existence of "ЭтоНовый" between ПередЗаписью and ПриЗаписи:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for any modifications to 'ДополнительныеСвойства' in the object module

# Test: Find procedures that modify 'ДополнительныеСвойства'. Expect: Any procedures that might remove or alter 'ЭтоНовый'.
ast-grep --lang bsl --pattern $'Процедура $_($_)
  $$$
  ДополнительныеСвойства = $_
  $$$
КонецПроцедуры' --json

Length of output: 1383


Script:

#!/bin/bash
# Description: Search for any assignments to 'ДополнительныеСвойства' in the codebase

# Find any lines where 'ДополнительныеСвойства' is assigned a new value
rg --type bsl 'ДополнительныеСвойства\s*='

Length of output: 72


Script:

#!/bin/bash
# Description: Define 'bsl' file type and search for assignments to 'ДополнительныеСвойства' in the codebase

# Add 'bsl' file type associated with .bsl extension
rg --type-add 'bsl:*.bsl' --type bsl 'ДополнительныеСвойства\s*='

Length of output: 694


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

#КонецЕсли
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,10 @@

#Область ОбработчикиКомандФормы

&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_ИнтегрируемыеСистемы);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
Expand Down Expand Up @@ -113,9 +113,17 @@
УчетнаяЗапись = Неопределено;
ИмяОбъекта = Неопределено;
КонецЕсли;

ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());

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

Процедура ПриЗаписи(Отказ)
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.ОбновитьХешЭлемента(ЭтотОбъект.Ссылка, ЭтотОбъект.ЭтоГруппа);
КонецЕсли;
КонецПроцедуры

#КонецОбласти // ОбработчикиСобытий

#Иначе
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,11 @@

#Область ОбработчикиКомандФормы

&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_НастройкиИнтеграции);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

КонецПроцедуры
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ПередЗаписью(Отказ)
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.ОбновитьХешЭлемента(ЭтотОбъект.Ссылка, ЭтотОбъект.ЭтоГруппа);
КонецЕсли;
КонецПроцедуры

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

#КонецЕсли
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,10 @@

#Область ОбработчикиКомандФормы

&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Справочники.пбп_ТипСоответствияОбъектовИБ);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,20 @@


#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ПередЗаписью(Отказ)
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.ОбновитьХешЭлемента(ЭтотОбъект.Ссылка, ЭтотОбъект.ЭтоГруппа);
КонецЕсли;
КонецПроцедуры
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Verify the correct usage of 'СвойствоСтруктуры' function

In the ПриЗаписи procedure, the function СвойствоСтруктуры is used with Ложь as the third parameter. Typically, the third parameter is an output variable to receive the property's value. Ensure that the function is used correctly to check for the existence of the property.

Consider modifying the code to correctly check for the property's existence:

Перем ЗначениеЭтоНовый;
Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", ЗначениеЭтоНовый) Тогда
    РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.ОбновитьХешЭлемента(ЭтотОбъект.Ссылка, ЭтотОбъект.ЭтоГруппа);
КонецЕсли;

Alternatively, if you only need to check for the existence of the property, you might use:

Если Не ДополнительныеСвойства.Содержит("ЭтоНовый") Тогда
    РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.ОбновитьХешЭлемента(ЭтотОбъект.Ссылка, ЭтотОбъект.ЭтоГруппа);
КонецЕсли;


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

#КонецЕсли

Check notice on line 19 in src/cf/ChartsOfCharacteristicTypes/пбп_ПредопределенныеЗначения/Ext/ObjectModule.bsl

View check run for this annotation

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

src/cf/ChartsOfCharacteristicTypes/пбп_ПредопределенныеЗначения/Ext/ObjectModule.bsl#L19

Удалите лишние последовательные пустые строки

Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,14 @@

#Область ОбработчикиКомандФормы

&НаСервереБезКонтекста
Процедура ЗаполнитьПредопределенныеНаСервере()
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(
ПланыВидовХарактеристик.пбп_ПредопределенныеЗначения);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПредопределенные(Команда)

ЗаполнитьПредопределенныеНаСервере();
пбп_ПредопределенныеЗначенияКлиент.СоздатьОбновитьПредопределенныеЗначения(ЭтотОбъект);

Элементы.Список.Обновить();

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

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

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?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">
<CommonForm uuid="166e97da-eea9-43e5-a47a-ee07fab3fd9c">
<Properties>
<Name>пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма разрешения конфликтов предопределенных элементов</v8:content>
</v8:item>
</Synonym>
<Comment/>
<FormType>Managed</FormType>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UsePurposes>
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
<v8:Value xsi:type="app:ApplicationUsePurpose">MobilePlatformApplication</v8:Value>
</UsePurposes>
<UseStandardCommands>false</UseStandardCommands>
<ExtendedPresentation/>
<Explanation/>
</Properties>
</CommonForm>
</MetaDataObject>
Loading
Loading