diff --git a/CHANGELOG.md b/CHANGELOG.md index fee87f3b..a39fb41b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ - Реквизит "Комментарий" имеет корректный тип - В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении / отмене проведения" - Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных +- В функциональной опции не установлен флаг "Привилегированный режим при получении" #### Формы @@ -30,6 +31,7 @@ - Документирующий комментарий не содержит секцию "Описание" для экспортной процедуры (функции) - Проверка корректного наименования переменных - Обращение к несуществующему параметру формы +- Обращение к опциональному параметру формы #### Запросы diff --git a/bundles/com.e1c.v8codestyle.bsl/markdown/optional-form-parameter-access.md b/bundles/com.e1c.v8codestyle.bsl/markdown/optional-form-parameter-access.md new file mode 100644 index 00000000..2f74d8cb --- /dev/null +++ b/bundles/com.e1c.v8codestyle.bsl/markdown/optional-form-parameter-access.md @@ -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/) \ No newline at end of file diff --git a/bundles/com.e1c.v8codestyle.bsl/markdown/ru/optional-form-parameter-access.md b/bundles/com.e1c.v8codestyle.bsl/markdown/ru/optional-form-parameter-access.md new file mode 100644 index 00000000..b4196a0d --- /dev/null +++ b/bundles/com.e1c.v8codestyle.bsl/markdown/ru/optional-form-parameter-access.md @@ -0,0 +1,31 @@ +# Обращение к опциональному параметру формы + +Параметры формы следует объявлять явно на закладке Параметры редактора формы. +В таком случае в коде обработчика ПриСозданииНаСервере не требуется проверять наличие свойств +у структуры Параметры, а сам состав параметров формы явно задекларирован (поэтому их не требуется +восстанавливать, изучая весь код обработчика ПриСозданииНаСервере). + +## Неправильно + +```bsl +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ФамилияИмяОтчество = Неопределено; + Если Параметры.Свойство("ФамилияИмяОтчество", ФамилияИмяОтчество) Тогда + Объект.Наименование = ФамилияИмяОтчество; + КонецЕсли; +КонецПроцедуры +``` + +## Правильно + +```bsl +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Объект.Наименование = Параметры.ФамилияИмяОтчество; +КонецПроцедуры +``` + +## См. + +- [Открытие параметризированных форм](https://its.1c.ru/db/v8std#content:741:hdoc) \ No newline at end of file diff --git a/bundles/com.e1c.v8codestyle.bsl/plugin.xml b/bundles/com.e1c.v8codestyle.bsl/plugin.xml index d4f108ca..21ef2209 100644 --- a/bundles/com.e1c.v8codestyle.bsl/plugin.xml +++ b/bundles/com.e1c.v8codestyle.bsl/plugin.xml @@ -371,6 +371,10 @@ category="com.e1c.v8codestyle.bsl" class="com.e1c.v8codestyle.internal.bsl.ExecutableExtensionFactory:com.e1c.v8codestyle.bsl.comment.check.ExportProcedureCommentDescriptionCheck"> + + diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/Messages.java b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/Messages.java index 10e4c759..fae66da8 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/Messages.java +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/Messages.java @@ -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; diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/OptionalFormParameterAccessCheck.java b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/OptionalFormParameterAccessCheck.java new file mode 100644 index 00000000..60c7a1af --- /dev/null +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/OptionalFormParameterAccessCheck.java @@ -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; + } +} diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages.properties b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages.properties index e751b369..dae09930 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages.properties +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages.properties @@ -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 diff --git a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages_ru.properties b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages_ru.properties index cad31d2a..a69f6f88 100644 --- a/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages_ru.properties +++ b/bundles/com.e1c.v8codestyle.bsl/src/com/e1c/v8codestyle/bsl/check/messages_ru.properties @@ -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 = Цикл содержит выполнение запроса diff --git a/bundles/com.e1c.v8codestyle.md/markdown/functional-option-privileged-get-mode.md b/bundles/com.e1c.v8codestyle.md/markdown/functional-option-privileged-get-mode.md new file mode 100644 index 00000000..56bbffd3 --- /dev/null +++ b/bundles/com.e1c.v8codestyle.md/markdown/functional-option-privileged-get-mode.md @@ -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/) \ No newline at end of file diff --git a/bundles/com.e1c.v8codestyle.md/markdown/ru/functional-option-privileged-get-mode.md b/bundles/com.e1c.v8codestyle.md/markdown/ru/functional-option-privileged-get-mode.md new file mode 100644 index 00000000..512b49c4 --- /dev/null +++ b/bundles/com.e1c.v8codestyle.md/markdown/ru/functional-option-privileged-get-mode.md @@ -0,0 +1,21 @@ +# В функциональной опции не установлен флаг "Привилегированный режим при получении" + +Во всех функциональных опциях должны быть выставлены флаги +«Привилегированный режим при получении». + +Исключение: в конфигурации могут быть предусмотрены параметризированные +ФО, для которых разработчик специально предусматривает различия в +получаемых значениях пользователями с разными правами. +Пример: Есть параметризованная ФО +ИспользватьВалютуПриРасчетеСПерсоналом, которая параметризуется +организацией. Если пользователь будет получать ее значение в контексте +своих прав, то он не увидит поле «валюта» в документе, если у него нет +ни одной организации, где применяется валютный учет. + +## Неправильно + +## Правильно + +## См. + +[Настройка ролей и прав доступа](https://its.1c.ru/db/v8std#content:689:hdoc:1.8) \ No newline at end of file diff --git a/bundles/com.e1c.v8codestyle.md/plugin.xml b/bundles/com.e1c.v8codestyle.md/plugin.xml index d269874d..616a54f5 100644 --- a/bundles/com.e1c.v8codestyle.md/plugin.xml +++ b/bundles/com.e1c.v8codestyle.md/plugin.xml @@ -126,6 +126,10 @@ category="com.e1c.v8codestyle.md" class="com.e1c.v8codestyle.md.check.MdObjectAttributeCommentNotExistCheck"> + + - \ No newline at end of file + diff --git a/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/FunctionalOptionPrivilegedGetModeCheck.java b/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/FunctionalOptionPrivilegedGetModeCheck.java new file mode 100644 index 00000000..63166228 --- /dev/null +++ b/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/FunctionalOptionPrivilegedGetModeCheck.java @@ -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); + } + + } + +} diff --git a/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/Messages.java b/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/Messages.java index 010afc3a..0b3c2104 100644 --- a/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/Messages.java +++ b/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/Messages.java @@ -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; diff --git a/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/messages.properties b/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/messages.properties index f76f6abd..b6c155af 100644 --- a/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/messages.properties +++ b/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/messages.properties @@ -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 diff --git a/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/messages_ru.properties b/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/messages_ru.properties index b0f3b417..da150d6b 100644 --- a/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/messages_ru.properties +++ b/bundles/com.e1c.v8codestyle.md/src/com/e1c/v8codestyle/md/check/messages_ru.properties @@ -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 = Не заполнено ни представление объекта, ни представление списка diff --git a/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/check/itests/OptionalFormParameterAccessCheckTest.java b/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/check/itests/OptionalFormParameterAccessCheckTest.java new file mode 100644 index 00000000..bda1d6ec --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/src/com/e1c/v8codestyle/bsl/check/itests/OptionalFormParameterAccessCheckTest.java @@ -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 markers = getModuleMarkers(); + assertEquals(1, markers.size()); + + Marker marker = markers.get(0); + assertEquals("5", marker.getExtraInfo().get(IExtraInfoKeys.TEXT_EXTRA_INFO_LINE_KEY)); + } + +} diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/.project b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/.project new file mode 100644 index 00000000..658b08db --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/.project @@ -0,0 +1,18 @@ + + + OptionalFormParameterAccess + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + com._1c.g5.v8.dt.core.V8ConfigurationNature + + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/.settings/org.eclipse.core.resources.prefs b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..99f26c02 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/DT-INF/PROJECT.PMF b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/DT-INF/PROJECT.PMF new file mode 100644 index 00000000..6835f1cd --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/DT-INF/PROJECT.PMF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Runtime-Version: 8.3.19 diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/CommonForms/TestForm/Form.form b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/CommonForms/TestForm/Form.form new file mode 100644 index 00000000..ea4428e3 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/CommonForms/TestForm/Form.form @@ -0,0 +1,37 @@ + + + + FormCommandBar + -1 + true + true + + true + + Left + true + + + OnCreateAtServer + OnCreateAtServer + + true + true + Vertical + true + true + true + true + true + + Organisation + + String + + + + + + + + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/CommonForms/TestForm/Module.bsl b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/CommonForms/TestForm/Module.bsl new file mode 100644 index 00000000..0dfb2d33 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/CommonForms/TestForm/Module.bsl @@ -0,0 +1,13 @@ + +&AtServer +Procedure OnCreateAtServer(Cancel, StandardProcessing) + + If Parameters.Property("Organisation") Then + // + EndIf; + + If Parameters.Property("Warehouse") Then + // + EndIf; + +EndProcedure diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/CommonForms/TestForm/TestForm.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/CommonForms/TestForm/TestForm.mdo new file mode 100644 index 00000000..8ba96a35 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/CommonForms/TestForm/TestForm.mdo @@ -0,0 +1,10 @@ + + + TestForm + + en + Test form + + PersonalComputer + MobileDevice + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/Configuration/CommandInterface.cmi b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/Configuration/CommandInterface.cmi new file mode 100644 index 00000000..0cf6de8a --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/Configuration/CommandInterface.cmi @@ -0,0 +1,2 @@ + + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/Configuration/Configuration.mdo b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/Configuration/Configuration.mdo new file mode 100644 index 00000000..0b86d3c0 --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/Configuration/Configuration.mdo @@ -0,0 +1,42 @@ + + + OptionalFormParameterAccess + + en + Optional form parameter access + + + + + + + + + 8.3.19 + ManagedApplication + PersonalComputer + + + true + + + OSBackup + true + + + Language.English + Managed + NotAutoFree + DontUse + DontUse + 8.3.19 + + English + + en + English + + en + + CommonForm.TestForm + diff --git a/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/Configuration/MainSectionCommandInterface.cmi b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/Configuration/MainSectionCommandInterface.cmi new file mode 100644 index 00000000..0cf6de8a --- /dev/null +++ b/tests/com.e1c.v8codestyle.bsl.itests/workspace/OptionalFormParameterAccess/src/Configuration/MainSectionCommandInterface.cmi @@ -0,0 +1,2 @@ + + diff --git a/tests/com.e1c.v8codestyle.md.itests/src/com/e1c/v8codestyle/md/check/itests/FunctionalOptionPrivilegedGetModeTest.java b/tests/com.e1c.v8codestyle.md.itests/src/com/e1c/v8codestyle/md/check/itests/FunctionalOptionPrivilegedGetModeTest.java new file mode 100644 index 00000000..3e98e980 --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/src/com/e1c/v8codestyle/md/check/itests/FunctionalOptionPrivilegedGetModeTest.java @@ -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); + } + +} diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/.project b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/.project new file mode 100644 index 00000000..78eb0b72 --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/.project @@ -0,0 +1,18 @@ + + + FunctionalOptionPrivilegedGetMode + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + com._1c.g5.v8.dt.core.V8ConfigurationNature + + diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/.settings/org.eclipse.core.resources.prefs b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..99f26c02 --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/DT-INF/PROJECT.PMF b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/DT-INF/PROJECT.PMF new file mode 100644 index 00000000..6835f1cd --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/DT-INF/PROJECT.PMF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Runtime-Version: 8.3.19 diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Configuration/CommandInterface.cmi b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Configuration/CommandInterface.cmi new file mode 100644 index 00000000..0cf6de8a --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Configuration/CommandInterface.cmi @@ -0,0 +1,2 @@ + + diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Configuration/Configuration.mdo b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Configuration/Configuration.mdo new file mode 100644 index 00000000..d9bafd2f --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Configuration/Configuration.mdo @@ -0,0 +1,46 @@ + + + FunctionalOptionPrivilegedGetMode + + en + Functional option privileged get mode + + + + + + + + + 8.3.19 + ManagedApplication + PersonalComputer + + + true + + + OSBackup + true + + + Language.English + Managed + NotAutoFree + DontUse + DontUse + 8.3.19 + + English + + en + English + + en + + FunctionalOption.UseOrganisations + FunctionalOption.UseWH + FunctionalOption.UseFinPlan + Constant.UseOrganisations + Constant.UseWH + diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Configuration/MainSectionCommandInterface.cmi b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Configuration/MainSectionCommandInterface.cmi new file mode 100644 index 00000000..0cf6de8a --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Configuration/MainSectionCommandInterface.cmi @@ -0,0 +1,2 @@ + + diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Constants/UseOrganisations/UseOrganisations.mdo b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Constants/UseOrganisations/UseOrganisations.mdo new file mode 100644 index 00000000..b674fb5b --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Constants/UseOrganisations/UseOrganisations.mdo @@ -0,0 +1,20 @@ + + + + + + + + UseOrganisations + + en + Use organisations + + + Boolean + + true + + + Managed + diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Constants/UseWH/UseWH.mdo b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Constants/UseWH/UseWH.mdo new file mode 100644 index 00000000..9440fea2 --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/Constants/UseWH/UseWH.mdo @@ -0,0 +1,20 @@ + + + + + + + + UseWH + + en + Use WH + + + Boolean + + true + + + Managed + diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/FunctionalOptions/UseFinPlan/UseFinPlan.mdo b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/FunctionalOptions/UseFinPlan/UseFinPlan.mdo new file mode 100644 index 00000000..e5d948c7 --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/FunctionalOptions/UseFinPlan/UseFinPlan.mdo @@ -0,0 +1,8 @@ + + + UseFinPlan + + en + Use fin plan + + diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/FunctionalOptions/UseOrganisations/UseOrganisations.mdo b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/FunctionalOptions/UseOrganisations/UseOrganisations.mdo new file mode 100644 index 00000000..9fd87e05 --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/FunctionalOptions/UseOrganisations/UseOrganisations.mdo @@ -0,0 +1,9 @@ + + + UseOrganisations + + en + Use organisations + + Constant.UseOrganisations + diff --git a/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/FunctionalOptions/UseWH/UseWH.mdo b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/FunctionalOptions/UseWH/UseWH.mdo new file mode 100644 index 00000000..05ea8939 --- /dev/null +++ b/tests/com.e1c.v8codestyle.md.itests/workspace/FunctionalOptionPrivilegedGetMode/src/FunctionalOptions/UseWH/UseWH.mdo @@ -0,0 +1,10 @@ + + + UseWH + + en + Use WH + + Constant.UseWH + true +