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:
commit
4d0b10ec67
@ -15,6 +15,7 @@
|
||||
- Реквизит "Комментарий" имеет корректный тип
|
||||
- В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении / отмене проведения"
|
||||
- Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных
|
||||
- В функциональной опции не установлен флаг "Привилегированный режим при получении"
|
||||
|
||||
#### Формы
|
||||
|
||||
@ -30,6 +31,7 @@
|
||||
- Документирующий комментарий не содержит секцию "Описание" для экспортной процедуры (функции)
|
||||
- Проверка корректного наименования переменных
|
||||
- Обращение к несуществующему параметру формы
|
||||
- Обращение к опциональному параметру формы
|
||||
|
||||
#### Запросы
|
||||
|
||||
|
@ -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/)
|
@ -0,0 +1,31 @@
|
||||
# Обращение к опциональному параметру формы
|
||||
|
||||
Параметры формы следует объявлять явно на закладке Параметры редактора формы.
|
||||
В таком случае в коде обработчика ПриСозданииНаСервере не требуется проверять наличие свойств
|
||||
у структуры Параметры, а сам состав параметров формы явно задекларирован (поэтому их не требуется
|
||||
восстанавливать, изучая весь код обработчика ПриСозданииНаСервере).
|
||||
|
||||
## Неправильно
|
||||
|
||||
```bsl
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
ФамилияИмяОтчество = Неопределено;
|
||||
Если Параметры.Свойство("ФамилияИмяОтчество", ФамилияИмяОтчество) Тогда
|
||||
Объект.Наименование = ФамилияИмяОтчество;
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
## Правильно
|
||||
|
||||
```bsl
|
||||
&НаСервере
|
||||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||||
Объект.Наименование = Параметры.ФамилияИмяОтчество;
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
## См.
|
||||
|
||||
- [Открытие параметризированных форм](https://its.1c.ru/db/v8std#content:741:hdoc)
|
@ -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">
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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 = Цикл содержит выполнение запроса
|
||||
|
@ -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/)
|
@ -0,0 +1,21 @@
|
||||
# В функциональной опции не установлен флаг "Привилегированный режим при получении"
|
||||
|
||||
Во всех функциональных опциях должны быть выставлены флаги
|
||||
«Привилегированный режим при получении».
|
||||
|
||||
Исключение: в конфигурации могут быть предусмотрены параметризированные
|
||||
ФО, для которых разработчик специально предусматривает различия в
|
||||
получаемых значениях пользователями с разными правами.
|
||||
Пример: Есть параметризованная ФО
|
||||
ИспользватьВалютуПриРасчетеСПерсоналом, которая параметризуется
|
||||
организацией. Если пользователь будет получать ее значение в контексте
|
||||
своих прав, то он не увидит поле «валюта» в документе, если у него нет
|
||||
ни одной организации, где применяется валютный учет.
|
||||
|
||||
## Неправильно
|
||||
|
||||
## Правильно
|
||||
|
||||
## См.
|
||||
|
||||
[Настройка ролей и прав доступа](https://its.1c.ru/db/v8std#content:689:hdoc:1.8)
|
@ -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>
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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 = Не заполнено ни представление объекта, ни представление списка
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
@ -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>
|
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
@ -0,0 +1,2 @@
|
||||
Manifest-Version: 1.0
|
||||
Runtime-Version: 8.3.19
|
@ -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>
|
@ -0,0 +1,13 @@
|
||||
|
||||
&AtServer
|
||||
Procedure OnCreateAtServer(Cancel, StandardProcessing)
|
||||
|
||||
If Parameters.Property("Organisation") Then
|
||||
//
|
||||
EndIf;
|
||||
|
||||
If Parameters.Property("Warehouse") Then
|
||||
//
|
||||
EndIf;
|
||||
|
||||
EndProcedure
|
@ -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>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
@ -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>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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>
|
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding/<project>=UTF-8
|
@ -0,0 +1,2 @@
|
||||
Manifest-Version: 1.0
|
||||
Runtime-Version: 8.3.19
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
@ -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>
|
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<cmi:CommandInterface xmlns:cmi="http://g5.1c.ru/v8/dt/cmi"/>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
Loading…
x
Reference in New Issue
Block a user