You've already forked v8-code-style
mirror of
https://github.com/1C-Company/v8-code-style.git
synced 2025-12-03 17:26:16 +02:00
@@ -20,6 +20,7 @@
|
||||
|
||||
#### Код модулей
|
||||
|
||||
- Проверка использования метода ДанныеФормыВЗначение вместо РеквизитФормыВЗначение
|
||||
- В проверку использования нерекомендуемых методов (use-non-recommended-method) добавлен метод ПолучитьФорму(GetForm)
|
||||
- Использование устаревшего метода Найти
|
||||
- Отсутствует комментарий к экспортной процедуре (функции)
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение
|
||||
|
||||
В большинстве случаев в модулях форм следует использовать метод формы РеквизитФормыВЗначение вместо метода ДанныеФормыВЗначение.
|
||||
|
||||
Рекомендация обусловлена соображениями унификации прикладного кода и тем, что синтаксис метода РеквизитФормыВЗначение проще,
|
||||
чем у ДанныеФормыВЗначение (а следовательно, меньше вероятность ошибки).
|
||||
В ДанныеФормыВЗначение необходимо дополнительно передавать тип значения, а для РеквизитФормыВЗначение это не обязательно,
|
||||
а в практическом плане - избыточно.
|
||||
|
||||
Наличие в платформе 1С:Предприятие метода формы РеквизитФормыВЗначение (наряду с методом глобального контекста ДанныеФормыВЗначение)
|
||||
объясняется только удобством его применения. С точки зрения эффективности и результата методы работают одинаково.
|
||||
|
||||
## Неправильно
|
||||
|
||||
```bsl
|
||||
ТаблицаПодписей = ДанныеФормыВЗначение(ТаблицаПодписей, Тип("ТаблицаЗначений"));
|
||||
```
|
||||
|
||||
## Правильно
|
||||
|
||||
```bsl
|
||||
ТаблицаПодписей = РеквизитФормыВЗначение("ТаблицаПодписей");
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
- [Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение](https://its.1c.ru/db/v8std#content:409:hdoc)
|
||||
@@ -0,0 +1,27 @@
|
||||
# Using FormAttributeToValue and FormDataToValue
|
||||
|
||||
In most cases, FormAttributeToValue is preferable to FormDataToValue.
|
||||
|
||||
Sticking to this recommendation will help you to keep the code consistent with other 1C:Enterprise applications. Also,
|
||||
FormAttributeToValue has simpler syntax, that is, less chance to make a code mistake.
|
||||
FormDataToValue requires the data type to be specified explicitly.
|
||||
|
||||
In contrast, FormAttributeToValue doesn't require data type to be specified.
|
||||
|
||||
1C:Enterprise supports both the FormAttributeToValue and FormDataToValue methods,
|
||||
but the last-mentioned is considered more usable. In terms of efficiency and output, the methods are equal.
|
||||
|
||||
## Noncompliant Code Example
|
||||
|
||||
```bsl
|
||||
SignaturesTable = FormDataToValue(SignaturesTable, Type("ValueTable"));
|
||||
```
|
||||
|
||||
## Compliant Solution
|
||||
|
||||
```bsl
|
||||
SignaturesTable = FormAttributeToValue("SignaturesTable");
|
||||
```
|
||||
|
||||
## See
|
||||
[Using FormAttributeToValue and FormDataToValue](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Code_conventions/Using_applied_objects_and_universal_value_collections/Using_FormAttributeToValue_and_FormDataToValue)
|
||||
@@ -347,6 +347,10 @@
|
||||
category="com.e1c.v8codestyle.bsl"
|
||||
class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.check.DeprecatedProcedureOutsideDeprecatedRegionCheck">
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.bsl"
|
||||
class="com.e1c.v8codestyle.bsl.check.UsingFormDataToValueCheck">
|
||||
</check>
|
||||
<check
|
||||
category="com.e1c.v8codestyle.bsl"
|
||||
class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.check.ExportProcedureMissingCommentCheck">
|
||||
|
||||
@@ -372,6 +372,12 @@ final class Messages
|
||||
|
||||
public static String MissingTemporaryFileDeletionCheck_title;
|
||||
|
||||
public static String FormDataToValueCheck_Description;
|
||||
|
||||
public static String FormDataToValueCheck_Issue;
|
||||
|
||||
public static String FormDataToValueCheck_Title;
|
||||
|
||||
public static String FormModulePragmaCheck_description;
|
||||
|
||||
public static String FormModulePragmaCheck_Form_module_compilation_pragma_used;
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 1C-Soft LLC and others.
|
||||
*
|
||||
* This program and the accompanying materials are made
|
||||
* available under the terms of the Eclipse Public License 2.0
|
||||
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*
|
||||
* Contributors:
|
||||
* 1C-Soft LLC - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package com.e1c.v8codestyle.bsl.check;
|
||||
|
||||
import static com._1c.g5.v8.dt.bsl.model.BslPackage.Literals.STATIC_FEATURE_ACCESS;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
||||
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
|
||||
import com.e1c.g5.v8.dt.check.CheckComplexity;
|
||||
import com.e1c.g5.v8.dt.check.ICheckParameters;
|
||||
import com.e1c.g5.v8.dt.check.components.BasicCheck;
|
||||
import com.e1c.g5.v8.dt.check.settings.IssueSeverity;
|
||||
import com.e1c.g5.v8.dt.check.settings.IssueType;
|
||||
import com.e1c.v8codestyle.check.StandardCheckExtension;
|
||||
import com.e1c.v8codestyle.internal.bsl.BslPlugin;
|
||||
|
||||
/**
|
||||
* Checking the use of the FormDataToValue method that is not recommended.
|
||||
*
|
||||
* @author Artem Iliukhin
|
||||
*/
|
||||
public class UsingFormDataToValueCheck
|
||||
extends BasicCheck
|
||||
{
|
||||
|
||||
private static final String CHECK_ID = "using-form-data-to-value"; //$NON-NLS-1$
|
||||
private static final String NAME = "FormDataToValue"; //$NON-NLS-1$
|
||||
private static final String NAME_RU = "ДанныеФормыВЗначение"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public String getCheckId()
|
||||
{
|
||||
return CHECK_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configureCheck(CheckConfigurer builder)
|
||||
{
|
||||
builder.title(Messages.FormDataToValueCheck_Title)
|
||||
.description(Messages.FormDataToValueCheck_Description)
|
||||
.complexity(CheckComplexity.NORMAL)
|
||||
.severity(IssueSeverity.TRIVIAL)
|
||||
.issueType(IssueType.CODE_STYLE)
|
||||
.extension(new StandardCheckExtension(409, getCheckId(), BslPlugin.PLUGIN_ID))
|
||||
.module()
|
||||
.checkedObjectType(STATIC_FEATURE_ACCESS);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void check(Object object, ResultAcceptor resultAceptor, ICheckParameters parameters,
|
||||
IProgressMonitor monitor)
|
||||
{
|
||||
StaticFeatureAccess featureAccess = (StaticFeatureAccess)object;
|
||||
String name = featureAccess.getName();
|
||||
if (NAME.equalsIgnoreCase(name) || NAME_RU.equalsIgnoreCase(name))
|
||||
{
|
||||
resultAceptor.addIssue(Messages.FormDataToValueCheck_Issue, object);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -170,6 +170,12 @@ ExtensionVariablePrefixCheck_Title = Extension variable does not have extension
|
||||
|
||||
ExtensionVariablePrefixCheck_Variable_0_should_have_1_prefix = The variable "{0}" should have "{1}" prefix
|
||||
|
||||
FormDataToValueCheck_Description = Using FormDataToValue instead FormAttributeToValue
|
||||
|
||||
FormDataToValueCheck_Issue = Use FormAttributeToValue instead FormDataToValue
|
||||
|
||||
FormDataToValueCheck_Title = Using FormDataToValue instead FormAttributeToValue
|
||||
|
||||
FormModuleMissingPragmaCheck_Missing_compilation_directives = Missing compilation directives
|
||||
|
||||
FormModuleMissingPragmaCheck_description = Always use compilation pragma in form module
|
||||
|
||||
@@ -170,6 +170,12 @@ ExportProcedureMissingCommentCheck_title=Отсутствует коммента
|
||||
|
||||
ExtensionVariablePrefixCheck_Variable_0_should_have_1_prefix = Переменная "{0}" должна иметь префикс "{1}"
|
||||
|
||||
FormDataToValueCheck_Description = Использование ДанныеФормыВЗначение вместо РеквизитФормыВЗначение
|
||||
|
||||
FormDataToValueCheck_Issue = Рекомендуется использовать РеквизитФормыВЗначение вместо ДанныеФормыВЗначение
|
||||
|
||||
FormDataToValueCheck_Title = Использование ДанныеФормыВЗначение вместо РеквизитФормыВЗначение
|
||||
|
||||
FormModuleMissingPragmaCheck_Missing_compilation_directives = Пропущена директива компиляции
|
||||
|
||||
FormModuleMissingPragmaCheck_description = Всегда использовать директивы компиляции в модуле формы
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
Procedure NonCompliant()
|
||||
SignaturesTable = FormDataToValue(SignaturesTable, Type("ValueTable"));
|
||||
EndProcedure
|
||||
@@ -0,0 +1,81 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (C) 2022, 1C-Soft LLC and others.
|
||||
*
|
||||
* This program and the accompanying materials are made
|
||||
* available under the terms of the Eclipse Public License 2.0
|
||||
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0
|
||||
*
|
||||
* Contributors:
|
||||
* 1C-Soft LLC - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package com.e1c.v8codestyle.bsl.check.itests;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com._1c.g5.v8.bm.core.IBmObject;
|
||||
import com._1c.g5.v8.dt.bsl.model.Module;
|
||||
import com._1c.g5.v8.dt.metadata.mdclass.AbstractForm;
|
||||
import com._1c.g5.v8.dt.validation.marker.IExtraInfoKeys;
|
||||
import com._1c.g5.v8.dt.validation.marker.Marker;
|
||||
import com.e1c.v8codestyle.bsl.check.UsingFormDataToValueCheck;
|
||||
|
||||
/**
|
||||
* The test for {@link UsingFormDataToValueCheck} check.
|
||||
*
|
||||
* @author Artem Iliukhin
|
||||
*/
|
||||
public class UsingFormDataToValueCheckTest
|
||||
extends AbstractSingleModuleTestBase
|
||||
{
|
||||
private static final String PROJECT_NAME = "CommonForm";
|
||||
|
||||
private static final String FQN = "CommonForm.Form.Form";
|
||||
|
||||
private static final String COMMON_FORM_FILE_NAME = "/src/CommonForms/Form/Module.bsl";
|
||||
|
||||
/**
|
||||
* Instantiates a new form data to value check test.
|
||||
*/
|
||||
public UsingFormDataToValueCheckTest()
|
||||
{
|
||||
super(UsingFormDataToValueCheck.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTestConfigurationName()
|
||||
{
|
||||
return PROJECT_NAME;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getModuleFileName()
|
||||
{
|
||||
return COMMON_FORM_FILE_NAME;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Module getModule()
|
||||
{
|
||||
IBmObject mdObject = getTopObjectByFqn(FQN, getProject());
|
||||
assertTrue(mdObject instanceof AbstractForm);
|
||||
Module module = ((AbstractForm)mdObject).getModule();
|
||||
assertNotNull(module);
|
||||
|
||||
return module;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormModuleHasPragma() throws Exception
|
||||
{
|
||||
updateModule(FOLDER_RESOURCE + "using-form-data-to-value.bsl");
|
||||
|
||||
Marker marker = getModuleFirstMarker();
|
||||
assertEquals("2", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user