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
+
+
+
+
+
+ OSBackup
+
+
+
+ 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
+
+
+
+
+
+ OSBackup
+
+
+
+ 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
+