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
@@ -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
@@ -0,0 +1,18 @@

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

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

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

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

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

LGTM with a suggestion: Consider reversing the condition in ПриЗаписи.

The ПриЗаписи (OnWrite) procedure is correctly implemented as an event handler that runs when an object is being saved. It checks the "ЭтоНовый" (IsNew) property in the ДополнительныеСвойства (AdditionalProperties) collection and updates the hash of the element in the пбп_СостоянияПредопределенныхЭлементов register if the property is not found or false.

However, consider reversing the condition for better readability and potentially more accurate logic:

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

This change makes it clearer that the hash is updated for existing objects, not new ones. It also allows for easy addition of specific actions for new objects if needed in the future.

Committable suggestion was skipped due to low confidence.


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

#КонецЕсли
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
@@ -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
@@ -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:

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


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

#КонецЕсли


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