1
0
mirror of https://github.com/1C-Company/v8-code-style.git synced 2025-02-21 07:56:09 +02:00

Merge remote-tracking branch 'origin/master' into edt-2023-1

This commit is contained in:
Dmitriy Marmyshev 2023-04-16 14:22:01 -07:00
commit 4d0b10ec67
37 changed files with 802 additions and 3 deletions

View File

@ -15,6 +15,7 @@
- Реквизит "Комментарий" имеет корректный тип
- В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении / отмене проведения"
- Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных
- В функциональной опции не установлен флаг "Привилегированный режим при получении"
#### Формы
@ -30,6 +31,7 @@
- Документирующий комментарий не содержит секцию "Описание" для экспортной процедуры (функции)
- Проверка корректного наименования переменных
- Обращение к несуществующему параметру формы
- Обращение к опциональному параметру формы
#### Запросы

View File

@ -0,0 +1,31 @@
# Optional form parameter access
Form parameters must be declared explicitly on the Parameters tab of the form editor.
In this case, the OnCreateOnServer handler code does not need to check for the existence of properties
at the Parameters structure, and the composition of the form parameters itself is explicitly declared
(therefore, they are not requiredrecover by examining the entire code of the OnCreateOnServer handler).
## Noncompliant Code Example
```bsl
&AtServer
Procedure OnCreateAtServer(Cancel, StandardProcessing)
FirstNameLastName = Undefined;
If Parameters.Property("FirstNameLastName", FirstNameLastName) Then
Object.Name = FirstNameLastName;
EndIf;
EndProcedure
```
## Compliant Solution
```bsl
&AtServer
Procedure OnCreateAtServer(Cancel, StandardProcessing)
Object.Name = Parameters.FirstNameLastName;
EndProcedure
```
## See
- [Opening parameterized forms](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Designing_user_interfaces/Implementation_of_form/Opening_parameterized_forms/)

View File

@ -0,0 +1,31 @@
# Обращение к опциональному параметру формы
Параметры формы следует объявлять явно на закладке Параметры редактора формы.
В таком случае в коде обработчика ПриСозданииНаСервере не требуется проверять наличие свойств
у структуры Параметры, а сам состав параметров формы явно задекларирован (поэтому их не требуется
восстанавливать, изучая весь код обработчика ПриСозданииНаСервере).
## Неправильно
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ФамилияИмяОтчество = Неопределено;
Если Параметры.Свойство("ФамилияИмяОтчество", ФамилияИмяОтчество) Тогда
Объект.Наименование = ФамилияИмяОтчество;
КонецЕсли;
КонецПроцедуры
```
## Правильно
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.Наименование = Параметры.ФамилияИмяОтчество;
КонецПроцедуры
```
## См.
- [Открытие параметризированных форм](https://its.1c.ru/db/v8std#content:741:hdoc)

View File

@ -371,6 +371,10 @@
category="com.e1c.v8codestyle.bsl"
class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.comment.check.ExportProcedureCommentDescriptionCheck">
</check>
<check
category="com.e1c.v8codestyle.bsl"
class="com.e1c.v8codestyle.bsl.check.OptionalFormParameterAccessCheck">
</check>
</extension>
<extension
point="org.eclipse.core.runtime.preferences">

View File

@ -448,6 +448,12 @@ final class Messages
public static String LockOutOfTry_Method_lock_out_of_try;
public static String OptionalFormParameterAccessCheck_description;
public static String OptionalFormParameterAccessCheck_Optional_form_parameter_access;
public static String OptionalFormParameterAccessCheck_title;
public static String VariableNameInvalidCheck_description;
public static String VariableNameInvalidCheck_message_variable_length_is_less_than;
public static String VariableNameInvalidCheck_param_MIN_NAME_LENGTH_PARAM_title;

View File

@ -0,0 +1,174 @@
/*******************************************************************************
* Copyright (C) 2023, 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.INVOCATION;
import java.text.MessageFormat;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.EcoreUtil2;
import com._1c.g5.v8.dt.bsl.model.DynamicFeatureAccess;
import com._1c.g5.v8.dt.bsl.model.Expression;
import com._1c.g5.v8.dt.bsl.model.FeatureAccess;
import com._1c.g5.v8.dt.bsl.model.Invocation;
import com._1c.g5.v8.dt.bsl.model.Module;
import com._1c.g5.v8.dt.bsl.model.ModuleType;
import com._1c.g5.v8.dt.bsl.model.StaticFeatureAccess;
import com._1c.g5.v8.dt.bsl.model.StringLiteral;
import com._1c.g5.v8.dt.common.StringUtils;
import com._1c.g5.v8.dt.form.model.Form;
import com._1c.g5.v8.dt.form.model.FormParameter;
import com._1c.g5.v8.dt.mcore.DuallyNamedElement;
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;
/**
* Check the Parameter.Property() access to exist parameter of form.
* @author Vadim Goncharov
*/
public class OptionalFormParameterAccessCheck
extends BasicCheck
{
private static final String CHECK_ID = "optional-form-parameter-access"; //$NON-NLS-1$
private static final String PROPERTY_NAME_RU = "Свойство"; //$NON-NLS-1$
private static final String PROPERTY_NAME = "Property"; //$NON-NLS-1$
private static final String PARAMETERS_KEYWORD_RU = "Параметры"; //$NON-NLS-1$
private static final String PARAMETERS_KEYWORD = "Parameters"; //$NON-NLS-1$
public OptionalFormParameterAccessCheck()
{
super();
}
@Override
public String getCheckId()
{
return CHECK_ID;
}
@Override
protected void configureCheck(CheckConfigurer builder)
{
builder.title(Messages.OptionalFormParameterAccessCheck_title)
.description(Messages.OptionalFormParameterAccessCheck_description)
.complexity(CheckComplexity.NORMAL)
.severity(IssueSeverity.MINOR)
.issueType(IssueType.CODE_STYLE)
.extension(new StandardCheckExtension(741, getCheckId(), BslPlugin.PLUGIN_ID))
.extension(ModuleTypeFilter.onlyTypes(ModuleType.FORM_MODULE))
.module()
.checkedObjectType(INVOCATION);
}
@Override
protected void check(Object object, ResultAcceptor resultAcceptor, ICheckParameters parameters,
IProgressMonitor monitor)
{
Invocation inv = (Invocation)object;
if (monitor.isCanceled() || !isValidInvocation(inv))
{
return;
}
String paramName = getParamName(inv);
if (monitor.isCanceled() || StringUtils.isEmpty(paramName))
{
return;
}
Module module = EcoreUtil2.getContainerOfType(inv, Module.class);
EObject moduleOwner = module.getOwner();
if (monitor.isCanceled() || !(moduleOwner instanceof Form))
{
return;
}
Form form = (Form)moduleOwner;
if (!monitor.isCanceled() && findParameter(form, paramName))
{
String msg = MessageFormat.format(Messages.OptionalFormParameterAccessCheck_Optional_form_parameter_access,
paramName);
resultAcceptor.addIssue(msg, inv);
}
}
private boolean isValidInvocation(Invocation inv)
{
FeatureAccess access = inv.getMethodAccess();
if ((access instanceof DynamicFeatureAccess) && !(((DynamicFeatureAccess)access).getFeatureEntries().isEmpty()))
{
DynamicFeatureAccess dfa = (DynamicFeatureAccess)access;
EObject featureEntry = dfa.getFeatureEntries().get(0).getFeature();
if (featureEntry instanceof DuallyNamedElement)
{
DuallyNamedElement namedElement = (DuallyNamedElement)featureEntry;
Expression source = dfa.getSource();
if ((namedElement.getName().equalsIgnoreCase(PROPERTY_NAME)
|| namedElement.getNameRu().equalsIgnoreCase(PROPERTY_NAME_RU))
&& source instanceof StaticFeatureAccess
&& !(((StaticFeatureAccess)source).getFeatureEntries().isEmpty()))
{
featureEntry = ((StaticFeatureAccess)source).getFeatureEntries().get(0).getFeature();
if (featureEntry instanceof DuallyNamedElement)
{
namedElement = (DuallyNamedElement)featureEntry;
return (namedElement.getName().equalsIgnoreCase(PARAMETERS_KEYWORD)
|| namedElement.getNameRu().equalsIgnoreCase(PARAMETERS_KEYWORD_RU)) && isValidParam(inv);
}
}
}
}
return false;
}
private boolean isValidParam(Invocation inv)
{
return !(inv.getParams().isEmpty() || !(inv.getParams().get(0) instanceof StringLiteral));
}
private String getParamName(Invocation inv)
{
StringLiteral literal = (StringLiteral)inv.getParams().get(0);
return String.join("", literal.lines(true)); //$NON-NLS-1$
}
private boolean findParameter(Form form, String paramName)
{
for (FormParameter param : form.getParameters())
{
if (param.getName().equalsIgnoreCase(paramName))
{
return true;
}
}
return false;
}
}

View File

@ -390,6 +390,12 @@ NstrStringLiteralFormatCheck_description = NStr string literal format
NstrStringLiteralFormatCheck_title = NStr string literal format
OptionalFormParameterAccessCheck_description = Optional form parameter access
OptionalFormParameterAccessCheck_Optional_form_parameter_access = Optional form parameter {0} access
OptionalFormParameterAccessCheck_title = Optional form parameter access
QueryInLoop_Loop_has_method_with_query__0 = Loop has method with query "{0}"
QueryInLoop_Loop_has_query = Loop has query

View File

@ -390,6 +390,12 @@ NstrStringLiteralFormatCheck_description = НСтр формат строков
NstrStringLiteralFormatCheck_title = НСтр формат строкового литерала
OptionalFormParameterAccessCheck_Optional_form_parameter_access = Обращение к опциональному параметру формы {0}
OptionalFormParameterAccessCheck_description = Обращение к опциональному параметру формы
OptionalFormParameterAccessCheck_title = Обращение к опциональному параметру формы
QueryInLoop_Loop_has_method_with_query__0 = Цикл содержит вызов метода с запросом "{0}"
QueryInLoop_Loop_has_query = Цикл содержит выполнение запроса

View File

@ -0,0 +1,19 @@
# Functional option don't set flag "Privileged get mode"
1.8. All functional options must have the "Privileged mode upon receiving"
check boxes selected.
Exception: a configuration can include parameterized functional options, for which developers
provide for differences in values obtained by users with different rights.
Example: There is a parameterized functional option UseCurrencyUponSettlementsWithPersonnel,
which is parameterized by the company. If a user receives its value in the context of their rights,
they will not see the Currency field in the document if they do not have a company where currency
accounting is applied.
## Noncompliant Code Example
## Compliant Solution
## See
[Configuring roles and access rights](https://kb.1ci.com/1C_Enterprise_Platform/Guides/Developer_Guides/1C_Enterprise_Development_Standards/Setting_data_access_rights/Configuring_roles_and_access_rights/)

View File

@ -0,0 +1,21 @@
# В функциональной опции не установлен флаг "Привилегированный режим при получении"
Во всех функциональных опциях должны быть выставлены флаги
«Привилегированный режим при получении».
Исключение: в конфигурации могут быть предусмотрены параметризированные
ФО, для которых разработчик специально предусматривает различия в
получаемых значениях пользователями с разными правами.
Пример: Есть параметризованная ФО
ИспользватьВалютуПриРасчетеСПерсоналом, которая параметризуется
организацией. Если пользователь будет получать ее значение в контексте
своих прав, то он не увидит поле «валюта» в документе, если у него нет
ни одной организации, где применяется валютный учет.
## Неправильно
## Правильно
## См.
[Настройка ролей и прав доступа](https://its.1c.ru/db/v8std#content:689:hdoc:1.8)

View File

@ -126,6 +126,10 @@
category="com.e1c.v8codestyle.md"
class="com.e1c.v8codestyle.md.check.MdObjectAttributeCommentNotExistCheck">
</check>
<check
category="com.e1c.v8codestyle.md"
class="com.e1c.v8codestyle.md.check.FunctionalOptionPrivilegedGetModeCheck">
</check>
</extension>
</plugin>
</plugin>

View File

@ -0,0 +1,81 @@
/*******************************************************************************
* Copyright (C) 2023, 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.md.check;
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.FUNCTIONAL_OPTION;
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.FUNCTIONAL_OPTION__PRIVILEGED_GET_MODE;
import static com._1c.g5.v8.dt.metadata.mdclass.MdClassPackage.Literals.FUNCTIONAL_OPTION__LOCATION;
import org.eclipse.core.runtime.IProgressMonitor;
import com._1c.g5.v8.dt.metadata.mdclass.FunctionalOption;
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.md.CorePlugin;
/**
* Check functional option use privileged get mode.
* @author Vadim Goncharov
*/
public class FunctionalOptionPrivilegedGetModeCheck
extends BasicCheck
{
private static final String CHECK_ID = "functional-option-privileged-get-mode"; //$NON-NLS-1$
public FunctionalOptionPrivilegedGetModeCheck()
{
super();
}
@Override
public String getCheckId()
{
return CHECK_ID;
}
@Override
protected void configureCheck(CheckConfigurer builder)
{
builder.title(Messages.FunctionalOptionPrivilegedGetModeCheck_title)
.description(Messages.FunctionalOptionPrivilegedGetModeCheck_description)
.complexity(CheckComplexity.NORMAL)
.severity(IssueSeverity.MAJOR)
.issueType(IssueType.WARNING)
.extension(new StandardCheckExtension(689, getCheckId(), CorePlugin.PLUGIN_ID))
.extension(new SkipAdoptedInExtensionMdObjectExtension())
.topObject(FUNCTIONAL_OPTION)
.checkTop()
.features(FUNCTIONAL_OPTION__PRIVILEGED_GET_MODE, FUNCTIONAL_OPTION__LOCATION);
}
@Override
protected void check(Object object, ResultAcceptor resultAcceptor, ICheckParameters parameters,
IProgressMonitor monitor)
{
FunctionalOption fo = (FunctionalOption)object;
if (!monitor.isCanceled() && fo.getLocation() != null && !fo.isPrivilegedGetMode())
{
resultAcceptor.addIssue(Messages.FunctionalOptionPrivilegedGetModeCheck_message, fo,
FUNCTIONAL_OPTION__PRIVILEGED_GET_MODE);
}
}
}

View File

@ -72,6 +72,9 @@ final class Messages
public static String ExtensionMdObjectNamePrefixCheck_Description;
public static String ExtensionMdObjectNamePrefixCheck_Object_0_should_have_1_prefix;
public static String ExtensionMdObjectNamePrefixCheck_Title;
public static String FunctionalOptionPrivilegedGetModeCheck_description;
public static String FunctionalOptionPrivilegedGetModeCheck_message;
public static String FunctionalOptionPrivilegedGetModeCheck_title;
public static String MdObjectNameLength_description;
public static String MdObjectNameLength_Maximum_name_length_description;
public static String MdObjectNameLength_message;

View File

@ -73,6 +73,12 @@ ExtensionMdObjectNamePrefixCheck_Object_0_should_have_1_prefix = The object "{0}
ExtensionMdObjectNamePrefixCheck_Title = Extension object name does not have extension prefix
FunctionalOptionPrivilegedGetModeCheck_message = Functional option don't use privileged get mode
FunctionalOptionPrivilegedGetModeCheck_description = Functional option don't use privileged get mode
FunctionalOptionPrivilegedGetModeCheck_title = Functional option don't use privileged get mode
MdListObjectPresentationCheck_Neither_Object_presentation_nor_List_presentation_is_not_filled = Neither Object presentation nor List presentation is not filled
MdListObjectPresentationCheck_decription = Neither Object presentation nor List presentation is not filled

View File

@ -60,20 +60,26 @@ DbObjectRefNonRefTypesCheck_Ref_and_other = Реквизиты составно
DbObjectRefNonRefTypesCheck_Title = Использование составного типа, содержащего ссылочные и не ссылочный тип вместе.
DocumentPostInPrivilegedModeCheck_title = В документе, предполагающем проведение, не стоит флаг "Прив. режим при проведении/отмене проведения"
DocumentPostInPrivilegedModeCheck_description = В документе, предполагающем проведение, не стоит флаг "Прив. режим при проведении/отмене проведения"
DocumentPostInPrivilegedModeCheck_message_Post_in_privileged_mode = В документе, предполагающем проведение, не стоит флаг "Прив. режим при проведении"
DocumentPostInPrivilegedModeCheck_message_Unpost_in_privileged_mode = В документе, предполагающем проведение, не стоит флаг "Прив. режим при отмене проведения"
DocumentPostInPrivilegedModeCheck_title = В документе, предполагающем проведение, не стоит флаг "Прив. режим при проведении/отмене проведения"
ExtensionMdObjectNamePrefixCheck_Description = Имя объекта в расширении не содержит префикс расширения
ExtensionMdObjectNamePrefixCheck_Object_0_should_have_1_prefix = Имя объекта "{0}" должно содержать префикс "{1}"
ExtensionMdObjectNamePrefixCheck_Title = Имя объекта в расширении должно содержать префикс расширения
FunctionalOptionPrivilegedGetModeCheck_message = В функциональной опции не установлен флаг "Привилегированный режим при получении"
FunctionalOptionPrivilegedGetModeCheck_description = В функциональной опции не установлен флаг "Привилегированный режим при получении"
FunctionalOptionPrivilegedGetModeCheck_title = В функциональной опции не установлен флаг "Привилегированный режим при получении"
MdListObjectPresentationCheck_Neither_Object_presentation_nor_List_presentation_is_not_filled = Не заполнено ни представление объекта, ни представление списка
MdListObjectPresentationCheck_decription = Не заполнено ни представление объекта, ни представление списка

View File

@ -0,0 +1,69 @@
/*******************************************************************************
* Copyright (C) 2023, 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 java.util.List;
import org.junit.Test;
import com._1c.g5.v8.dt.validation.marker.IExtraInfoKeys;
import com._1c.g5.v8.dt.validation.marker.Marker;
import com.e1c.v8codestyle.bsl.check.OptionalFormParameterAccessCheck;
/**
* Test class for {@link OptionalFormParameterAccessCheck}
*/
public class OptionalFormParameterAccessCheckTest
extends AbstractSingleModuleTestBase
{
private static final String PROJECT_NAME = "OptionalFormParameterAccess";
private static final String COMMON_FORM_FILE_NAME = "/src/CommonForms/TestForm/Module.bsl";
public OptionalFormParameterAccessCheckTest()
{
super(OptionalFormParameterAccessCheck.class);
}
@Override
protected String getTestConfigurationName()
{
return PROJECT_NAME;
}
@Override
protected String getModuleFileName()
{
return COMMON_FORM_FILE_NAME;
}
/**
* Test the Parameters.Property("") access to exist form parameter.
*
* @throws Exception the exception
*/
@Test
public void testOptionalFormParameterAccess() throws Exception
{
List<Marker> markers = getModuleMarkers();
assertEquals(1, markers.size());
Marker marker = markers.get(0);
assertEquals("5", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY));
}
}

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>OptionalFormParameterAccess</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ConfigurationNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -0,0 +1,2 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.19

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:form="http://g5.1c.ru/v8/dt/form">
<autoCommandBar>
<name>FormCommandBar</name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<handlers>
<event>OnCreateAtServer</event>
<name>OnCreateAtServer</name>
</handlers>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<parameters>
<name>Organisation</name>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
</form:Form>

View File

@ -0,0 +1,13 @@
&AtServer
Procedure OnCreateAtServer(Cancel, StandardProcessing)
If Parameters.Property("Organisation") Then
//
EndIf;
If Parameters.Property("Warehouse") Then
//
EndIf;
EndProcedure

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonForm xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d6a9c018-6b69-46fa-a1d1-9821ee7ea5d5">
<name>TestForm</name>
<synonym>
<key>en</key>
<value>Test form</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</mdclass:CommonForm>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="dc17eb25-9fec-4997-8e59-ca736dfd6b63">
<name>OptionalFormParameterAccess</name>
<synonym>
<key>en</key>
<value>Optional form parameter access</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="fc968cb6-f902-4387-8720-1b3ce80f10b5"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="3d691eba-f860-4571-937d-7a0369604445"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="69f3ec31-6fa7-454d-b160-55d8ab50f3ee"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="3853c1ad-5fbe-4353-98e4-7dc9ead46330"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="61d8c266-eeee-4eea-949b-f5beb3258d28"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="bdf4936e-20eb-4f56-a739-eff4bde83c57"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="9a63718a-77ba-487c-9b5d-b258c2f1034a"/>
<configurationExtensionCompatibilityMode>8.3.19</configurationExtensionCompatibilityMode>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<usedMobileApplicationFunctionalities>
<functionality>
<use>true</use>
</functionality>
<functionality>
<functionality>OSBackup</functionality>
<use>true</use>
</functionality>
</usedMobileApplicationFunctionalities>
<defaultLanguage>Language.English</defaultLanguage>
<dataLockControlMode>Managed</dataLockControlMode>
<objectAutonumerationMode>NotAutoFree</objectAutonumerationMode>
<modalityUseMode>DontUse</modalityUseMode>
<synchronousPlatformExtensionAndAddInCallUseMode>DontUse</synchronousPlatformExtensionAndAddInCallUseMode>
<compatibilityMode>8.3.19</compatibilityMode>
<languages uuid="c0b86a18-4d45-4bfa-bd85-3677df68c5e4">
<name>English</name>
<synonym>
<key>en</key>
<value>English</value>
</synonym>
<languageCode>en</languageCode>
</languages>
<commonForms>CommonForm.TestForm</commonForms>
</mdclass:Configuration>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,63 @@
/*******************************************************************************
* Copyright (C) 2023, 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.md.check.itests;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.junit.Test;
import com._1c.g5.v8.dt.core.platform.IDtProject;
import com._1c.g5.v8.dt.validation.marker.Marker;
import com.e1c.g5.v8.dt.testing.check.CheckTestBase;
import com.e1c.v8codestyle.md.check.FunctionalOptionPrivilegedGetModeCheck;
/**
* The test class for {@link FunctionalOptionPrivilegedGetModeCheck}
* @author Vadim Goncharov
*/
public class FunctionalOptionPrivilegedGetModeTest
extends CheckTestBase
{
private static final String CHECK_ID = "functional-option-privileged-get-mode";
private static final String PROJECT_NAME = "FunctionalOptionPrivilegedGetMode";
/**
* Test functional options use privileged get mode check.
*
* @throws Exception the exception
*/
@Test
public void testFunctionalOptionsUsePrivilegedGetModeCheck() throws Exception
{
IDtProject project = openProjectAndWaitForValidationFinish(PROJECT_NAME);
assertNotNull(project);
long id = getTopObjectIdByFqn("FunctionalOption.UseOrganisations", project);
Marker marker = getFirstMarker(CHECK_ID, id, project);
assertNotNull(marker);
id = getTopObjectIdByFqn("FunctionalOption.UseWH", project);
marker = getFirstMarker(CHECK_ID, id, project);
assertNull(marker);
id = getTopObjectIdByFqn("FunctionalOption.UseFinPlan", project);
marker = getFirstMarker(CHECK_ID, id, project);
assertNull(marker);
}
}

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>FunctionalOptionPrivilegedGetMode</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ConfigurationNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -0,0 +1,2 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.19

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1b741952-6feb-4d71-86bc-e42c8829502c">
<name>FunctionalOptionPrivilegedGetMode</name>
<synonym>
<key>en</key>
<value>Functional option privileged get mode</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="92e41153-3388-4488-9109-6ac2f2da2f85"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="0e61eb98-13c9-4f17-8d8b-d7c3db1f1cf9"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="5feda00b-2a34-4ef7-94c7-a42d2c1b3383"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="1394d1c5-e816-4ebe-ad8e-0a9e7c010de0"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="87d1c60c-d799-4f9e-a5c2-6fafb1ca5de6"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="f12d9825-2e11-4907-9195-584011211b6c"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="aea3f88c-6d77-42c3-a856-d730b30708c4"/>
<configurationExtensionCompatibilityMode>8.3.19</configurationExtensionCompatibilityMode>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<usedMobileApplicationFunctionalities>
<functionality>
<use>true</use>
</functionality>
<functionality>
<functionality>OSBackup</functionality>
<use>true</use>
</functionality>
</usedMobileApplicationFunctionalities>
<defaultLanguage>Language.English</defaultLanguage>
<dataLockControlMode>Managed</dataLockControlMode>
<objectAutonumerationMode>NotAutoFree</objectAutonumerationMode>
<modalityUseMode>DontUse</modalityUseMode>
<synchronousPlatformExtensionAndAddInCallUseMode>DontUse</synchronousPlatformExtensionAndAddInCallUseMode>
<compatibilityMode>8.3.19</compatibilityMode>
<languages uuid="ce819e23-56d0-46b5-a0d6-c1db9d31d2e1">
<name>English</name>
<synonym>
<key>en</key>
<value>English</value>
</synonym>
<languageCode>en</languageCode>
</languages>
<functionalOptions>FunctionalOption.UseOrganisations</functionalOptions>
<functionalOptions>FunctionalOption.UseWH</functionalOptions>
<functionalOptions>FunctionalOption.UseFinPlan</functionalOptions>
<constants>Constant.UseOrganisations</constants>
<constants>Constant.UseWH</constants>
</mdclass:Configuration>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e07fba1f-19d5-4fff-9993-6299a77c042d">
<producedTypes>
<managerType typeId="d332705f-f367-40a0-aeb8-5208d89103ff" valueTypeId="4c54d407-778b-4bd8-813d-0787c7ea9161"/>
<valueManagerType typeId="34141bfe-6a5e-4814-88e8-ade8e4d7cad8" valueTypeId="24efdeb7-692d-47e3-b1fa-b254d9f99a6f"/>
<valueKeyType typeId="2e5657de-1309-41a1-9a61-60fe3ced7071" valueTypeId="69004c7f-769f-4a91-865c-1b55d614fd45"/>
</producedTypes>
<name>UseOrganisations</name>
<synonym>
<key>en</key>
<value>Use organisations</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<useStandardCommands>true</useStandardCommands>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataLockControlMode>Managed</dataLockControlMode>
</mdclass:Constant>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d123187a-ac23-4b47-8e00-eaba44eda1f1">
<producedTypes>
<managerType typeId="97a35551-f2d4-454f-8b24-695a4d5148d9" valueTypeId="f84c9c7a-2647-47de-bd62-20189d4ec401"/>
<valueManagerType typeId="49cc1fcf-c475-4343-a5c4-03051b6e5c6a" valueTypeId="986ff5cb-4fe2-4d0d-9104-5f2b5f592ab3"/>
<valueKeyType typeId="80cca2c3-22e2-4caf-b89e-e7cf8ba38773" valueTypeId="22a98862-e390-4eb7-8c78-4763b0b5a2df"/>
</producedTypes>
<name>UseWH</name>
<synonym>
<key>en</key>
<value>Use WH</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<useStandardCommands>true</useStandardCommands>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataLockControlMode>Managed</dataLockControlMode>
</mdclass:Constant>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:FunctionalOption xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="272e8a2f-16e7-4a38-9839-a996471ed1fb">
<name>UseFinPlan</name>
<synonym>
<key>en</key>
<value>Use fin plan</value>
</synonym>
</mdclass:FunctionalOption>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:FunctionalOption xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="0565c7e7-395c-45f0-9edd-74f86f5e4942">
<name>UseOrganisations</name>
<synonym>
<key>en</key>
<value>Use organisations</value>
</synonym>
<location>Constant.UseOrganisations</location>
</mdclass:FunctionalOption>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:FunctionalOption xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="06dc6e76-1d2f-4fe8-b6fe-c0e020f288ad">
<name>UseWH</name>
<synonym>
<key>en</key>
<value>Use WH</value>
</synonym>
<location>Constant.UseWH</location>
<privilegedGetMode>true</privilegedGetMode>
</mdclass:FunctionalOption>