стандарт 455

ID: #std455

#### Шаблоны модулей:
- [Общего](https://v8std.ru/std/455/#14)
- [Объектов, менеджеров, наборов записей, обработок, отчетов](https://v8std.ru/std/455/#15)
- [Форм](https://v8std.ru/std/455/#16)
- [Команд](https://v8std.ru/std/455/#17)

# Структура модуля

#### 1.1.

Старайтесь выделить из модуля следующие разделы:

- заголовок модуля;
- раздел описания переменных;
- экспортные процедуры и функции модуля, составляющие его программный интерфейс;
- обработчики событий объекта (формы);
- служебные процедуры и функции модуля;
- раздел инициализации переменных.

Некоторые разделы могут присутствовать только в модулях определенного вида. Например, обработчики событий элементов форм могут присутствовать только в модулях форм, а раздел описания переменных и раздел инициализации не могут быть определены в неглобальных общих модулях, модулях менеджеров объектов, наборов записей, значений констант и модуле сеанса.

Помогите другим разработчикам понять ваш код. Так будет проще ориентироваться всем. Ведь ты будешь заранее знать где и что искать. Как в типовой, так и в доработанной конфигурации.

#### 1.2.

Не делайте очень большие разделы, разделяйте на подразделы. Так будет проще ориентироваться в коде.

#### 1.3.

Разделы и подразделы оформляйте в виде областей. Называйте области так же, как и переменные. См. [#std454: Правила образования имен переменных](https://v8std.ru/std/454/)

#### 1.4.

Шаблон общего модуля:

#### Паттерн

```bsl
#Область ПрограммныйИнтерфейс
// Код процедур и функций (1)
#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс
// Код процедур и функций (2)
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
// Код процедур и функций (3)
#КонецОбласти
```

1. Содержит экспортные процедуры и функции для использования другими объектами конфигурации или другими программами (например, через внешнее соединение).

2. Содержит экспортные процедуры и функции для модулей этой же библиотеки. В нем размещайте экспортные процедуры и функции, которые допустимо вызывать только из других подсистем этой же библиотеки.

3. Содержит внутреннюю реализацию общего модуля. ; ;  Если общий модуль это часть некоторой подсистемы, здесь допустимо размещать служебные экспортные процедуры и функции, предназначенные только для вызова из других объектов данной подсистемы.

```bsl
#Region Public
// Enter code here.
#EndRegion

#Region Internal
// Enter code here.
#EndRegion

#Region Private
// Enter code here.
#EndRegion
```

Для больших модулей разбивайте на подразделы по функциональности:

#### Пример

```bsl
#Область ОбновлениеИнформационнойБазы
// Код процедур и функций
#КонецОбласти
```

```bsl
#Region InfobaseUpdate
// Enter code here.
#EndRegion
```

#### 1.5.

Шаблон модулей объектов, менеджеров, наборов записей, обработок, отчетов:

#### Паттерн

```bsl
#Область ОписаниеПеременных

#КонецОбласти

#Область ПрограммныйИнтерфейс
// Код процедур и функций (1)
#КонецОбласти

#Область ОбработчикиСобытий
// Код процедур и функций (2)
#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс
// Код процедур и функций (3)
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
// Код процедур и функций (4)
#КонецОбласти

#Область Инициализация

#КонецОбласти
```

1. Содержит экспортные процедуры и функции для использования в других модулях конфигурации или другими программами (например, через внешнее соединение). ; ;  Не помещайте сюда методы, которые нужны только для вызова из модулей самого объекта, его форм и команд. ; ;  Например, процедуры заполнения табличной части документа, вызываемые из обработки заполнения в модуле объекта или из формы документа в обработчике команды формы - **не являются программным интерфейсом модуля
   объекта**. Они вызываются только в самом модуле и из форм этого же объекта. Размещайте их в разделе `Служебные процедуры и функции`.

2. Содержит обработчики событий модуля объекта `ПриЗаписи`, `ПриПроведении` и др.

3. Такое же предназначение, как и в общих модулях [1.4.](https://v8std.ru/std/455/#14)

4. Такое же предназначение, как и в общих модулях [1.4.](https://v8std.ru/std/455/#14)

```bsl
#Region Variables

#EndRegion

#Region Public
// Enter code here.
#EndRegion

#Region EventHandlers
// Enter code here.
#EndRegion

#Region Internal
// Enter code here.
#EndRegion

#Region Private
// Enter code here.
#EndRegion

#Region Initialize

#EndRegion
```

#### 1.6.

Шаблон модулей форм:

#### Паттерн

```bsl
#Область ОписаниеПеременных

#КонецОбласти

#Область ОбработчикиСобытийФормы
// Код процедур и функций (1)
#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы
// Код процедур и функций (2)
#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормы<ИмяТаблицыФормы>
// Код процедур и функций (3)
#КонецОбласти

#Область ОбработчикиКомандФормы
// Код процедур и функций (4)
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
// Код процедур и функций (5)
#КонецОбласти
```

1. Содержит обработчики событий формы: `ПриСозданииНаСервере`, `ПриОткрытии` и др.

2. Содержит обработчики событий элементов, расположенных в основной части формы, которые не связаны с таблицами на форме.

3. Таких разделов может быть несколько. Для каждой таблицы свой раздел. Для обработчиков таблиц формы и элементов формы.

4. Для обработчиков команд формы.

5. Такое же предназначение, как и в общих модулях [1.4.](https://v8std.ru/std/455/#14)

```bsl
#Region Variables

#EndRegion

#Region FormEventHandlers
// Enter code here.
#EndRegion

#Region FormHeaderItemsEventHandlers
// Enter code here.
#EndRegion

#Region FormTableItemsEventHandlers<FormTableName>
// Enter code here.
#EndRegion

#Region FormCommandsEventHandlers
// Enter code here.
#EndRegion

#Region Private
// Enter code here.
#EndRegion
```

#### 1.7.

Шаблон модулей команд:

#### Паттерн

```bsl
#Область ОбработчикиСобытий
// Код процедур и функций (1)
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
// Код процедур и функций (2)
#КонецОбласти
```

1. Содержит обработчик команды: `ОбработкаКоманды`.

2. Такое же предназначение, как и в общих модулях [1.4.](https://v8std.ru/std/455/#14)

```bsl
#Region EventHandlers
// Enter code here.
#EndRegion

#Region Private
// Enter code here.
#EndRegion
```

#### 1.8.

Не оставляйте пустых областей в модуле.

#### Проверки
[#v8cs:module-region-empty](https://v8std.ru/diagnostics/v8-code-style/module-region-empty/)

#### 2.1.

Модуль может содержать заголовок модуля с описанием состава модуля. Описывайте в заголовке модулей форм параметры формы.

#### Пример

```bsl
////////////////////////////////////////////////////////////////////////////////
// Клиентские процедуры и функции общего назначения:
// - для работы со списками в формах;
// - для работы с журналом регистрации;
// - для обработки действий пользователя в процессе редактирования
//   многострочного текста, например комментария в документах;
// - прочее.
//
////////////////////////////////////////////////////////////////////////////////
```

#### 2.2.

Пример описания переменных:

#### Пример

```bsl
#Область ОписаниеПеременных

Перем ВалютаУчета;
Перем АдресПоддержки;
...

#КонецОбласти
```

```bsl
#Region Variables

Var PresentationCurrency;
Var SupportEmail;
...

#EndRegion
```

Все переменные в разделе глобальных переменных модуля должны быть прокомментированы. Комментировать лучше в той же строке, где объявлена переменная.

- См. [#std454: Правила образования имен переменных](https://v8std.ru/std/454/)
- См. [#std639: Использование переменных в программных модулях](https://v8std.ru/std/639/)

#### 2.3.

Программный интерфейс располагается сразу после описания переменных. Так методы будет проще найти тем, кто открыл модуль впервые.

- См. [#std453: Описание процедур и функций](https://v8std.ru/std/453/)

#### 2.4.1.

Обработчики событий формы, команд и элементов формы располагайте до служебных методов. Читать код приятнее когда можно читать сверху вниз.

#### 2.4.2.

Старайтесь обработчики одного элемента формы располагать рядом. Придерживайтесь порядка следования в панели редактора формы.

#### 2.4.3.

Для каждого события создавайте свой обработчик.

Если одинаковые действия ожидаются для событий разных элементов, то:

- Создайте отдельную процедуру, выполняющую действие.
- Для каждого элемент формы создайте свой обработчик с именем по умолчанию.
- В каждом обработчике вызовите общую процедуру.

#### Неправильно

```bsl
&НаКлиенте
Процедура ПоИсполнителюПриИзменении(Элемент)

    ПараметрыОтбора = Новый Соответствие();
    ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору);
    ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю);
    УстановитьОтборСписка(Список, ПараметрыОтбора);

КонецПроцедуры

&НаКлиенте
Процедура ПоАвторуПриИзменении(Элемент)

    ПоИсполнителюПриИзменении(Неопределено);

КонецПроцедуры
```

#### Правильно

```bsl
&НаКлиенте
Процедура ПоИсполнителюПриИзменении(Элемент)

    УстановитьОтбор();

КонецПроцедуры

&НаКлиенте
Процедура ПоАвторуПриИзменении(Элемент)

    УстановитьОтбор();

КонецПроцедуры

&НаСервере
Процедура УстановитьОтбор()

    ПараметрыОтбора = Новый Соответствие();
    ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору);
    ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю);
    УстановитьОтборСписка(Список, ПараметрыОтбора);

КонецПроцедуры
```

Не вызывайте процедуры обработчики из кода напрямую. Оставьте их вызов только платформе. Смешение сценариев вызова неоправдано усложняет логику работы и в один прекрасный момент программа может стать очень сложной и развалиться.

#### 2.5.

Обработчики событий модулей объекта и менеджера объекта размещайте после раздела с программным интерфейсом, но до служебных процедур и функций модуля.

#### 2.5.1.

Располагайте обработчики в модулях объекта и менеджера по порядку следования в описании встроенного языка.

#### 2.6.

Служебные процедуры и функции модуля размещайте в модуле следом за обработчиками событий.

Если общий модуль это часть некоторой подсистемы, здесь допустимо размещать служебные экспортные процедуры и функции, предназначенные только для вызова из других объектов данной подсистемы.

Методы, связанные между собой по характеру или по логике работы, располагайте рядом.

Не группируйте методы по месту исполнения, как на серверные, клиентские, функции без контекста. Такое упорядочивание усложняет понимание логики модуля отвлекая разработчика от ее реализации.

#### 2.7.

Пример инициализации переменных:

#### Пример

```bsl
#Область Инициализация

АдресПоддержки = "v8@1c.ru";
ВыполнитьИнициализацию();
...

#КонецОбласти
```

```bsl
#Region Initialize

SupportEmail = "v8@1c.ru";
Ctor();
...

#EndRegion
```

#### Проверки
[#bslls:CodeOutOfRegion](https://v8std.ru/diagnostics/bslls/CodeOutOfRegion/)
[#bslls:CommonModuleMissingAPI](https://v8std.ru/diagnostics/bslls/CommonModuleMissingAPI/)
[#bslls:DuplicateRegion](https://v8std.ru/diagnostics/bslls/DuplicateRegion/)
[#bslls:EmptyRegion](https://v8std.ru/diagnostics/bslls/EmptyRegion/)
[#bslls:MissingVariablesDescription](https://v8std.ru/diagnostics/bslls/MissingVariablesDescription/)
[#bslls:NonExportMethodsInApiRegion](https://v8std.ru/diagnostics/bslls/NonExportMethodsInApiRegion/)
[#bslls:NonStandardRegion](https://v8std.ru/diagnostics/bslls/NonStandardRegion/)
[#v8cs:invocation-form-event-handler](https://v8std.ru/diagnostics/v8-code-style/invocation-form-event-handler/)
[#v8cs:module-structure-event-regions](https://v8std.ru/diagnostics/v8-code-style/module-structure-event-regions/)
[#v8cs:module-structure-form-event-regions](https://v8std.ru/diagnostics/v8-code-style/module-structure-form-event-regions/)
[#v8cs:module-structure-init-code-in-region](https://v8std.ru/diagnostics/v8-code-style/module-structure-init-code-in-region/)
[#v8cs:module-structure-method-in-regions](https://v8std.ru/diagnostics/v8-code-style/module-structure-method-in-regions/)
[#v8cs:module-structure-top-region](https://v8std.ru/diagnostics/v8-code-style/module-structure-top-region/)
[#v8cs:module-structure-var-in-region](https://v8std.ru/diagnostics/v8-code-style/module-structure-var-in-region/)

[#acc:239](https://v8std.ru/diagnostics/acc/239/)
[#acc:240](https://v8std.ru/diagnostics/acc/240/)
[#acc:241](https://v8std.ru/diagnostics/acc/241/)
[#acc:273](https://v8std.ru/diagnostics/acc/273/)
[#acc:274](https://v8std.ru/diagnostics/acc/274/)
[#acc:286](https://v8std.ru/diagnostics/acc/286/)
[#acc:425](https://v8std.ru/diagnostics/acc/425/)
[#acc:426](https://v8std.ru/diagnostics/acc/426/)
[#acc:427](https://v8std.ru/diagnostics/acc/427/)
[#acc:428](https://v8std.ru/diagnostics/acc/428/)
[#acc:429](https://v8std.ru/diagnostics/acc/429/)
[#acc:430](https://v8std.ru/diagnostics/acc/430/)
[#acc:1340](https://v8std.ru/diagnostics/acc/1340/)
[#acc:1341](https://v8std.ru/diagnostics/acc/1341/)
[#acc:1387](https://v8std.ru/diagnostics/acc/1387/)
#### Источник

https://its.1c.ru/db/v8std#content:455

Процедура (функция), не являющаяся обработчиком события, расположена в стандартной области обработчиков событий. АПК:1340

Процедура (функция), являющаяся обработчиком события, расположена вне стандартной области обработчиков событий АПК:1341

Обнаружено дублирование стандартной области. АПК:1387

В модуле должны быть определены стандартные области. АПК:239

Код в модуле с (возможным) программным интерфейсом размещен вне стандартных областей. АПК:240

Код размещен вне стандартных областей. АПК:241

В структуре модуля присутствуют пустые области. АПК:273

Неправильный порядок стандартных областей в коде. АПК:274

Стандартная область является вложенной. АПК:286

Отсутствует область "ОписаниеПеременных" в тексте модуля. АПК:425

Переменная объявлена в области, содержащей процедуру или функцию. АПК:426

Отсутствует область "Инициализация" в тексте модуля. АПК:427

Операторы раздела инициализации расположены в области, содержащей процедуры или функции. АПК:428

Переменная объявлена вне области "ОписаниеПеременных". АПК:429

Операторы раздела инициализации расположены вне области "Инициализация". АПК:430

Код расположен вне области BSLLS:CodeOutOfRegion

Общий модуль должен иметь программный интерфейс BSLLS:CommonModuleMissingAPI

Повторяющиеся разделы модуля BSLLS:DuplicateRegion

Область не должна быть пустой BSLLS:EmptyRegion

Все объявления переменных должны иметь описание BSLLS:MissingVariablesDescription

Неэкспортные методы в областях ПрограммныйИнтерфейс и СлужебныйПрограммныйИнтерфейс BSLLS:NonExportMethodsInApiRegion

Нестандартные разделы модуля BSLLS:NonStandardRegion

Программный вызов обработчика события формы (invocation-form-event-handler)

Область пустая (module-region-empty)

Раздел «Обработчики событий» содержит только методы являющиеся обработчиками событий (module-structure-event-regions)

Проверяет регион обработчиков событий формы (module-structure-form-event-regions)

Раздел инициализации содержит код инициализации (module-structure-init-code-in-region)

Проверяет что метод находится в области (module-structure-method-in-regions)

Стандартные области структуры модуля верхнего уровня (module-structure-top-region)

Раздел описания переменных (module-structure-var-in-region)

Описание процедур и функций #std453

Правила образования имен переменных #std454

Использование переменных в программных модулях #std639

Структура модуля #std455


стандарт 456

ID: #std456

# Тексты модулей

#### 1.

Пишите код на русском языке.

На английском языке можно писать имена веб-сервисов, названия их методов и параметров.
Еще на английском можно писать название полей внешних структур данных.

#### В стандарте не указано

Вместо обращений к полям внешних структур на английском лучше обращаться к ключам через строковые литералы.
Так будет очевидно, что внешний ключ именно внешний.

#### Неправильно

```bsl
Количество = Результат.Count;
```

#### Правильно

```bsl
Количество = Результат["Count"];
```

#### 1.1.

Не используйте букву `ё` в коде программы.
Используйте `ё` в том, что выводится пользователю: текстах, справке, если без `ё` будет неправильное прочтение слова.

#### В стандарте не указано

Если использовать букву `ё`, то очень сложно искать по кодовой базе. Придется искать во всех вариантах написания.

#### Проверки
[#bslls:YoLetterUsage](https://v8std.ru/diagnostics/bslls/YoLetterUsage/)

#### 1.2.

Не используйте в коде программы неразрывные пробелы ` ` и знак минус `-` `−` в других начертаниях (короткое `–` `–`, длинное тире `—` `—`).

При копировании текста из офисных документов такие символы часто оказываются в тексте модулей и приводят к проблемам:

- Не работает поиск фрагментов текста
- Ошибается подсказка типов параметров процедур и функций в конфигураторе и в 1С:EDT
- Минуса в выражениях приводят к синтаксической ошибке

#### 2.

Удаляйте мертвый код. Программа должна содержать только используемые процедуры и функции. Неиспользуемые - удалите.

#### 3.

Удалите закомментированный код и код связанный с процессом разработки (отладочный код, служебные отметки:

#### Неправильно
```bsl
// TODO: Сделать
Процедура ПередУдалением(Отказ)
// {{MRG[ <-> ]
// }}MRG[ --> ]
КонецПроцедуры
```

#### Неправильно

```bsl
Процедура ПередУдалением(Отказ)
//    Если Истина Тогда
//        Сообщение("Для отладки");
//    КонецЕсли;
КонецПроцедуры
```

#### Неправильно

```bsl
Процедура ПередУдалением(Отказ)
    Если Истина Тогда
        // Иванов: доделать
    КонецЕсли;
КонецПроцедуры
```

#### Правильно

Удалить обработчик **ПередУдалением**

Не используйте комментарии в текстах запросов для патча запросов

#### Неправильно

```bsl
ТекстЗапроса =
    "ВЫБРАТЬ
    |   Контрагенты.Ссылка КАК Ссылка
    |// ПОМЕСТИТЬ Контрагенты
    |ИЗ
    |   Справочник.Контрагенты КАК Контрагенты"
;

Если ВыгрузитьВоВременнуюТаблицу Тогда
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// ПОМЕСТИТЬ", "ПОМЕСТИТЬ");
КонецЕсли;
```

[#std437: Оформление текстов запросов](https://v8std.ru/std/437/)

#### 4.

Пишите один оператор на одной строке.

#### Правильно

```bsl
НачальныйИндекс = 0;
Индекс = 0;
Результат = 0;
```

На одной строке несколько операторов можно писать для простых операторов присваивания

#### Сомнительно, но ОК

```bsl
НачальныйИндекс = 0; Индекс = 0; Результат = 0;
```

#### 5.

Код программы оформляйте отступом. Для отступа используется табуляция, а не пробелы.
Размер табуляции: 4 символа.

В конфигураторе можно сменить размер табуляции. Код надо оформлять так, чтобы при смене размера табуляции выравнивание сохранялось.

#### 5.1.

С крайней левой позиции без отступов пишем:

- операторы `Процедура`, `КонецПроцедуры`, `Функция`, `КонецФункции`
- заголовки (описания) процедур и функций
- объявление переменных модуля
- код вне процедур и функций
- директивы компилятора `&НаКлиенте`, `&НаСервере`...
- аннотации `&Перед`, `&После`...
- инструкции препроцессора `#Если Сервер Тогда`, `#Область`...

#### В стандарте не указано
Автоматическое форматирование платформы не выравнивает директивы препроцессора по левому краю.
После автоформатирования придется довыравнивать руками.

#### 5.2.

Текст внутри блока процедур `НачатьТранзакцию()` и `ЗафиксироватьТранзакцию()` не сдвигается.

#### 6.

Длина строки: 120 символов.
Табуляция считается за 4 символа.

Строки длиннее 120 пишутся только в случае, когда перенос невозможен.

#### В стандарте не указано

Ограничение длины строк важно. Когда выполняем сравнение модулей, особенно для трехстороннего сравнения:
приходится высматривать сразу три редактора кода. Даже широкие экраны не помогут при более 120 символах.

[#std444: Перенос выражений](https://v8std.ru/std/444/)

#### 7.1.

Тексты комментариев должны составляться:

- по правилам русского языка
- в деловом стиле
- быть эмоционально сдержанными
- не содержать слов, не относящихся к функциональности программы

#### В стандарте не указано

Чтобы научиться писать хорошие комментарии прочитайте

-  Роберт Мартин, Чистый код, Глава 4. Комментарии
-  Стив Макконнелл, Совершенный код, Раздел 32. Самодокументирующийся код

#### 7.2.

Небольшие комментарии пишите в конце строки

#### Правильно

```bsl
НайденныеОшибки.Колонки.Добавить("Номер"); // для совместимости
```

#### 7.3.

Большие комментарии или комментарии к фрагменту кода пишите перед кодом отдельной строкой.
Текст выравнивайте по левому краю.
Между символами комментария `//` и началом комментария должен быть пробел.

#### Правильно

```bsl
// Инициализируем переменные для выполнения расчетов,
// которые выполняются далее по тексту модуля.
ТекущаяДата = ОбщегоНазначения.ПолучитьРабочуюДату();
ТекущийГод = Год(ТекущаяДата);
ТекущийМесяц = Месяц(ТекущаяДата);
ТекущаяНеделя = НеделяГода(ТекущаяДата);
ТекущийДень = День(ТекущаяДата);
```

#### 8.

Тексты больших процедур и функций разбивайте на отдельные сворачиваемые области.
Имена областей называются так же, как имена переменных из стандарта [правила образования имен переменных](https://v8std.ru/std/454/)

#### См. также

- [#std469: Правила создания общих модулей](https://v8std.ru/std/469/)
- [#std455: Структура модуля](https://v8std.ru/std/455/)

#### Проверки
[#bslls:ExcessiveAutoTestCheck](https://v8std.ru/diagnostics/bslls/ExcessiveAutoTestCheck/)
[#bslls:InvalidCharacterInFile](https://v8std.ru/diagnostics/bslls/InvalidCharacterInFile/)
[#bslls:LineLength](https://v8std.ru/diagnostics/bslls/LineLength/)
[#bslls:OneStatementPerLine](https://v8std.ru/diagnostics/bslls/OneStatementPerLine/)
[#bslls:SpaceAtStartComment](https://v8std.ru/diagnostics/bslls/SpaceAtStartComment/)
[#bslls:UnsafeFindByCode](https://v8std.ru/diagnostics/bslls/UnsafeFindByCode/)
[#bslls:UnusedLocalMethod](https://v8std.ru/diagnostics/bslls/UnusedLocalMethod/)

[#acc:163](https://v8std.ru/diagnostics/acc/163/)
[#acc:217](https://v8std.ru/diagnostics/acc/217/)
[#acc:244](https://v8std.ru/diagnostics/acc/244/)
[#acc:246](https://v8std.ru/diagnostics/acc/246/)
[#acc:282](https://v8std.ru/diagnostics/acc/282/)
[#acc:284](https://v8std.ru/diagnostics/acc/284/)
[#acc:285](https://v8std.ru/diagnostics/acc/285/)
[#acc:433](https://v8std.ru/diagnostics/acc/433/)
[#acc:1244](https://v8std.ru/diagnostics/acc/1244/)
[#acc:1339](https://v8std.ru/diagnostics/acc/1339/)
[#acc:1353](https://v8std.ru/diagnostics/acc/1353/)
#### Источник

https://its.1c.ru/db/v8std#content:456

Пишите код на русском языке.

Обращение к несуществующему объекту метаданных. АПК:1244

Избыточная проверка параметра "АвтоТест". АПК:1339

Английский идентификатор в коде модуля на русском языке. АПК:1353

Строка текста модуля содержит букву "ё". АПК:163

Неправильная кодировка символа "минус". АПК:217

Длинные комментарии должны начинаться с большой буквы. АПК:244

Нет пробела в начале комментария. АПК:246

Закомментированный код или отсутствие пробела в комментарии после знака "//". АПК:282

В тексте модуля содержатся служебные комментарии. АПК:284

Закомментированный код содержит запрещенный символ. АПК:285

Неэкспортная переменная не используется в модуле. АПК:433

Избыточная проверка параметра АвтоТест BSLLS:ExcessiveAutoTestCheck

Недопустимый символ BSLLS:InvalidCharacterInFile

Ограничение на длину строки BSLLS:LineLength

Одно выражение в одной строке BSLLS:OneStatementPerLine

Пробел в начале комментария BSLLS:SpaceAtStartComment

Небезопасное использование метода НайтиПоКоду() BSLLS:UnsafeFindByCode

Неиспользуемый локальный метод BSLLS:UnusedLocalMethod

Использование буквы "ё" в текстах модулей BSLLS:YoLetterUsage

Оформление текстов запросов #std437

Перенос выражений #std444

Правила образования имен переменных #std454

Структура модуля #std455

Правила создания общих модулей #std469

Тексты модулей #std456


стандарт 458

ID: #std458

# Общие требования по локализации конфигурации

При разработке ориентируйтесь на сценарии, когда:

- в конфигурации предусмотрено несколько языков интерфейса пользователя;
- данные в базе вводятся на одном языке, который отличается от основного языка конфигурации (свойство метаданных `ОсновнойЯзык`).

При этом стандарт не регламентирует:

- ввод данных сразу на нескольких языках;
- многоязычное представление метаданных, которые хранятся в данных (например, предопределенные элементы, дополнительные реквизиты и т.п.).

#### См. также

- [#std769: Поставка международной версии конфигурации](https://v8std.ru/std/769/)
- [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/)
- [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/)
- [#std763: Форматирование даты, числа, Булево: требования по локализации](https://v8std.ru/std/763/)
- [#std764: Строковые константные выражения в коде: требования по локализации](https://v8std.ru/std/764/)
- [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/)
- [#std767: Регламентные задания: требования по локализации](https://v8std.ru/std/767/)
- [#std766: Макеты: требования по локализации](https://v8std.ru/std/766/)
- [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/)

#### Источник

https://its.1c.ru/db/v8std#content:458

Интерфейсные тексты в коде: требования по локализации #std761

Запросы, динамические списки и отчеты на СКД: требования по локализации #std762

Форматирование даты, числа, Булево: требования по локализации #std763

Строковые константные выражения в коде: требования по локализации #std764

Элементы форм: требования по локализации #std765

Макеты: требования по локализации и поддержке разных языков интерфейса #std766

Регламентные задания: требования по локализации #std767

Поставка международной версии конфигурации #std769

Автогенерированные данные в информационной базе: требования по локализации #std784

Общие требования по локализации конфигурации #std458


стандарт 459

ID: #std459

# Использование значений, влияющих на поведение клиентского приложения

#### 1.

Если поведение многих форм или команд зависит от одних и тех же значений,
для минимизации клиент-серверного взаимодействия используйте
[#std724: общие модули с повторным использованием возвращаемых значений](https://v8std.ru/std/724/)
со свойством `Повторное использование возвращаемых значений = На время сеанса`.

Такой подход применяйте, когда изменение этих значений в течение сеанса некритично,
и в рамках сеанса можно использовать один раз полученное значение.

#### 2.

Функция общего модуля должна возвращать за один вызов сразу весь набор значений,
которые нужны в разных сценариях.

#### Пример

```bsl
Настройки = НастройкиПодсистемыРегистрации();
ВремяНачала = Настройки.ВремяНачалаРабочегоДня;
ВремяОкончания = Настройки.ВремяОкончанияРабочегоДня;
```

#### 3.

Ограничивайте применение клиентских модулей с повторным использованием возвращаемых значений.

Если данные влияют только на одну форму или небольшой набор форм,
храните их в реквизитах формы и получайте в `ПриСозданииНаСервере`.

Если от значения зависит поведение команд или большого числа форм,
используйте подход с общим модулем и кешированием на сеанс.

Не используйте переменные модуля управляемого приложения и модуля обычного приложения
как способ уменьшения клиент-серверного взаимодействия.

#### См. также

- [#std487: Минимизация количества серверных вызовов и трафика](https://v8std.ru/std/487/)
- [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/)

#### Источник

https://its.1c.ru/db/v8std#content:459

Если поведение многих форм или команд зависит от одних и тех же значений, для минимизации клиент-серверного взаимодействия используйте #std724: общие модули с повторным...

Минимизация количества серверных вызовов и трафика #std487

Использование модулей с повторным использованием возвращаемых значений #std724

Использование значений, влияющих на поведение клиентского приложения #std459


стандарт 460

ID: #std460

# Использование управляемого режима блокировки

В конфигурациях следует использовать управляемый режим блокировок (свойство конфигурации `Режим управления блокировкой данных` устанавливается в значение `Управляемый`) и учитывать его особенности.

- чтение данных другими транзакциями будет невозможно только при несовместимых управляемых блокировках в текущей и других транзакциях;
- явную управляемую блокировку нужно устанавливать перед чтением данных:
    - если считанные данные затем будут изменяться;
    - если нужно обеспечить неизменность считанных данных до конца транзакции;
- при установке управляемой блокировки стремитесь блокировать только те записи, которые реально будут обрабатываться;
- не следует применять конструкцию `ДЛЯ ИЗМЕНЕНИЯ`, так как в этом режиме она не имеет смысла.

При работе в автоматическом режиме управления блокировками платформа 1С:Предприятие устанавливает высокий уровень изоляции на уровне СУБД, что позволяет исключить получение нецелостных или некорректных данных без специальных действий со стороны разработчика.

Одновременно могут возникать избыточные блокировки на уровне СУБД. Они связаны с особенностями механизмов блокировок в самой СУБД и с тем, что СУБД не учитывает физический смысл и структуру объектов метаданных 1С:Предприятия.

#### См. также

- [#std648: Ответственное чтение данных](https://v8std.ru/std/648/)
- [#std659: Общие сведения об избыточных блокировках](https://v8std.ru/std/659/)
- Методика перевода приложений в управляемый режим блокировки: [Блокировки данных в 1С:Предприятии 8](http://kb.1c.ru/articleView.jsp?id=30)

#### Проверки
[#v8cs:ql-using-for-update](https://v8std.ru/diagnostics/v8-code-style/ql-using-for-update/)

[#acc:66](https://v8std.ru/diagnostics/acc/66/)
[#acc:67](https://v8std.ru/diagnostics/acc/67/)
#### Источник

https://its.1c.ru/db/v8std#content:460

В конфигурациях следует использовать управляемый режим блокировок (свойство конфигурации Режим управления блокировкой данных устанавливается в значение Управляемый) и учитывать его...

Использована конструкция "ДЛЯ ИЗМЕНЕНИЯ". АПК:66

Для конфигурации не установлен управляемый режим блокировки данных. АПК:67

Запрос содержит конструкцию "ДЛЯ ИЗМЕНЕНИЯ" (ql-using-for-update)

Ответственное чтение данных #std648

Общие сведения об избыточных блокировках #std659

Использование управляемого режима блокировки #std460


стандарт 463

ID: #std463

# Обработчик события ОбработкаПроверкиЗаполнения

#### 1.1.

В обработчике `ОбработкаПроверкиЗаполнения` модуля объекта выполняйте проверки корректности заполнения реквизитов объекта:

- реквизитов шапки;
- измерений и ресурсов;
- реквизитов табличных частей;
- других данных объекта, проверяемых до записи.

#### 1.2.

Используйте этот обработчик, когда обычной проверки на заполненность недостаточно:

- значение реквизита зависит от других реквизитов;
- обязательность заполнения зависит от условий или функциональных опций.

Если проверка заполнения условная, в коде удаляйте такие реквизиты из массива `ПроверяемыеРеквизиты`.

Рекомендуемая схема:

- создать массив `НепроверяемыеРеквизиты`;
- в процессе проверки добавлять в него имена реквизитов (и табличных частей), которые сейчас не нужно проверять;
- в конце удалить эти реквизиты из `ПроверяемыеРеквизиты`.

Не используйте альтернативные схемы.
Иначе условные проверки скрываются от анализа свойства `Проверка заполнения`.

#### Неправильно

```bsl
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    // Проверка значения реквизита на соответствие требованиям.
    Если Не ИННСоответствуетТребованиям(ИНН) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = НСтр("ru = 'ИНН задан неверно.'");
        Сообщение.Поле = "ИНН";
        Сообщение.УстановитьДанные(ЭтотОбъект);
        Сообщение.Сообщить();
        Отказ = Истина;
    КонецЕсли;

    // Условная обязательность реквизита.
    Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
        ПроверяемыеРеквизиты.Добавить("ИндивидуальныйПредприниматель");
    КонецЕсли;

КонецПроцедуры
```

#### Правильно

```bsl
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

    НепроверяемыеРеквизиты = Новый Массив;

    // Проверка значения реквизита на соответствие требованиям.
    Если Не ИННСоответствуетТребованиям(ИНН) Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = НСтр("ru = 'ИНН задан неверно.'");
        Сообщение.Поле = "ИНН";
        Сообщение.УстановитьДанные(ЭтотОбъект);
        Сообщение.Сообщить();
        Отказ = Истина;
        НепроверяемыеРеквизиты.Добавить("ИНН");
    КонецЕсли;

    // Условная обязательность реквизита.
    Если ЮрФизЛицо <> Перечисления.ЮрФизЛицо.ФизЛицо Тогда
        НепроверяемыеРеквизиты.Добавить("ИндивидуальныйПредприниматель");
    КонецЕсли;

    УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты);

КонецПроцедуры

Процедура УдалитьНепроверяемыеРеквизитыИзМассива(МассивРеквизитов, МассивНепроверяемыхРеквизитов) Экспорт

    Для Каждого ЭлементМассива Из МассивНепроверяемыхРеквизитов Цикл

        ПорядковыйНомер = МассивРеквизитов.Найти(ЭлементМассива);
        Если ПорядковыйНомер <> Неопределено Тогда
            МассивРеквизитов.Удалить(ПорядковыйНомер);
        КонецЕсли;

    КонецЦикла;

КонецПроцедуры
```

#### 1.3.

Учитывайте, что `ОбработкаПроверкиЗаполнения` вызывается не при каждой записи объекта.
Например, обработчик не вызывается при программной записи.

#### 1.4.

Если в конфигурации используется подсистема `Обмен данными` БСП, обработчик `ОбработкаПроверкиЗаполнения` может вызываться при проведении документов после загрузки из сообщения обмена.

Чтобы отключать отдельные проверки в этом режиме, анализируйте `ДополнительныеСвойства.ОтложенноеПроведение`.

## Проверки, выполняемые в и вне транзакции записи объекта

#### 2.1.

Проверки в `ОбработкаПроверкиЗаполнения` выполняются вне транзакции записи.
Это эффективно: при ошибке заполнения операция прерывается до записи в базу.

При таких проверках помните, что новое состояние объекта еще не записано.
Если нужна проверка по данным системы с опорой на текущий объект, используйте сохранение данных во временные таблицы.

#### 2.2.

Не размещайте в `ОбработкаПроверкиЗаполнения` проверки, которые должны гарантировать целостность объекта и зависимых данных (например, движений).

Для таких проверок используйте обработчики, работающие в транзакции записи:

- [#std464: `ПередЗаписью`](https://v8std.ru/std/464/)
- [#std465: `ПриЗаписи`](https://v8std.ru/std/465/)
- `ОбработкаПроведения` (для документов).

Для транзакционных проверок выделяют два случая:

#### 2.2.1.

Проверка состояния движений документов оперативного учета.

Проверку остатка ресурса в транзакции записи имеет смысл делать только если все документы, меняющие этот ресурс, проверяют его так же.
Если хотя бы один документ меняет ресурс без проверки, такие проверки обычно нужно выносить из транзакции.
Исключения допустимы, но должны быть обоснованы.

#### 2.2.2.

Проверка состояния других объектов базы, на которые ссылается текущий объект.

Если правило может быть нарушено при записи разных объектов, проверка должна быть симметричной.
Например, если при записи подразделения проверяется, что выбранный руководитель имеет должность `Руководитель`, то при записи сотрудника должна быть встречная проверка этого же правила.
Иначе правило следует проверять вне транзакции у обоих объектов.

#### См. также

- [#std478: Подсказка и проверка заполнения](https://v8std.ru/std/478/)
- [#std464: Обработчик события ПередЗаписью](https://v8std.ru/std/464/)
- [#std465: Обработчик события ПриЗаписи](https://v8std.ru/std/465/)
- [#std686: Работа с параметром "Отказ" в обработчиках событий](https://v8std.ru/std/686/)

#### Источник

https://its.1c.ru/db/v8std#content:463

В обработчике ОбработкаПроверкиЗаполнения модуля объекта выполняйте проверки корректности заполнения реквизитов объекта:

Обработчик события ПередЗаписью #std464

Обработчик события ПриЗаписи #std465

Подсказка и проверка заполнения #std478

Работа с параметром "Отказ" в обработчиках событий #std686

Обработчик события ОбработкаПроверкиЗаполнения #std463


стандарт 464

ID: #std464

# Обработчик события ПередЗаписью

#### 1.

В обработчике `ПередЗаписью` выполняйте:

- заполнение реквизитов объекта (набора записей, значения константы);
- проверку правильности заполнения;
- проверки связанности состояния объекта с внешними данными;
- работу со «старыми» значениями реквизитов, уже сохраненными в базе.

Этот обработчик особенно полезен при редактировании уже записанных объектов.

#### 2.

Все действия в обработчике `ПередЗаписью` выполняйте только после проверки `ОбменДанными.Загрузка`.

#### Пример

```bsl
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Предпроверки и дозаполнение реквизитов объекта.
    ...
КонецПроцедуры
```

#### См. также

- [#std773: Использование признака ОбменДанными.Загрузка в обработчиках событий объекта](https://v8std.ru/std/773/)
- [#std463: Проверки, выполняемые в и вне транзакции записи объекта](https://v8std.ru/std/463/)

#### Проверки
[#bslls:DataExchangeLoading](https://v8std.ru/diagnostics/bslls/DataExchangeLoading/)
[#v8cs:data-exchange-load](https://v8std.ru/diagnostics/v8-code-style/data-exchange-load/)

[#acc:75](https://v8std.ru/diagnostics/acc/75/)
#### Источник

https://its.1c.ru/db/v8std#content:464

В обработчике ПередЗаписью выполняйте:

Отсутствует обязательная конструкция "Если ОбменДанными.Загрузка Тогда ...". АПК:75

Отсутствует проверка признака ОбменДанными.Загрузка в обработчике событий объекта BSLLS:DataExchangeLoading

Проверка ОбменДанными.Загрузка в обработчике события (data-exchange-load)

Использование признака ОбменДанными.Загрузка в обработчиках событий объекта #std773

Обработчик события ПередЗаписью #std464


стандарт 465

ID: #std465

# Обработчик события ПриЗаписи

#### 1.

В обработчике `ПриЗаписи` модуля объекта (набора записей, значения константы) выполняйте действия, связанные с уже записанным объектом:

- запись связанных данных в другие объекты конфигурации;
- другие действия после изменения объекта.

Не изменяйте данные самого записываемого объекта.
К моменту вызова `ПриЗаписи` объект уже записан в базе данных.

#### 2.

Все действия в обработчике `ПриЗаписи` выполняйте только после проверки `ОбменДанными.Загрузка`.

#### Пример

```bsl
Процедура ПриЗаписи(Отказ)

    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Постобработка после записи объекта.
    ОбновитьСвязанныеДанные();

КонецПроцедуры
```

#### См. также

- [#std463: Проверки, выполняемые в и вне транзакции записи объекта](https://v8std.ru/std/463/)
- [#std773: Использование признака ОбменДанными.Загрузка в обработчиках событий объекта](https://v8std.ru/std/773/)

#### Проверки
[#bslls:DataExchangeLoading](https://v8std.ru/diagnostics/bslls/DataExchangeLoading/)
[#v8cs:data-exchange-load](https://v8std.ru/diagnostics/v8-code-style/data-exchange-load/)

[#acc:75](https://v8std.ru/diagnostics/acc/75/)
#### Источник

https://its.1c.ru/db/v8std#content:465

В обработчике ПриЗаписи модуля объекта (набора записей, значения константы) выполняйте действия, связанные с уже записанным объектом:

Обработчик события ПриЗаписи #std465


стандарт 466

ID: #std466

# Обработчик события ПриКопировании

В обработчике модуля объекта `ПриКопировании` выполняются действия, связанные с созданием нового объекта путем копирования.

В частности, здесь очищают реквизиты, значения которых не должны сохраняться в новом объекте после копирования.

#### Источник

https://its.1c.ru/db/v8std#content:466

В обработчике модуля объекта ПриКопировании выполняются действия, связанные с созданием нового объекта путем копирования.

Обработчик события ПриКопировании #std466


стандарт 467

ID: #std467

# Общие требования к конфигурации

#### 1.1.

Используйте только штатные и документированные возможности платформы.

Если вы нашли какой-то трюк, который не описан в документации - не используйте его. Нет никаких гарантий, что этот трюк будет работать в следующей версии платформы.

#### 1.2.

Платформа может работать в различных СУБД, операционных системах, браузерах.
Рассчитывайте на работу в разной среде.

- [#std723: Требуется поддерживать работу в Linux и macOS](https://v8std.ru/std/723/)
- [Системные требования 1С:Предприятия 8](https://v8.1c.ru/tekhnologii/sistemnye-trebovaniya-1s-predpriyatiya-8/)
- [Приложение 7. Особенности поведения системы в различных режимах](https://its.1c.ru/db/v83doc/bookmark/dev/TI000001285)
- [Приложение 8. Особенности работы с различными СУБД](https://its.1c.ru/db/v83doc/bookmark/dev/TI000001285)

#### 1.3.

Исправляйте ошибки обнаруженные при проверке конфигурации.
Чтобы запустить статический анализ, откройте конфигуратор и перейдите в меню  `Конфигурация` – `Проверка конфигурации...`.

Исключения:

- [#std492: Обработчики событий модуля формы, подключаемые из кода](https://v8std.ru/std/492/)
- [#std679: Ограничение на установку признака Вызов сервера у общих модулей](https://v8std.ru/std/679/)
- [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/)

#### 1.4.

Поддержите работу в режиме толстого клиента обычного приложения в минимальном виде для администраторов.
Старые технологии могли использоваться во внешних обработках или отчетах, которые внедрялись много лет назад. Отказаться от них совсем будет нечестно по отношению к администраторам. Администраторы могут рассчитывать что их старые инструменты запустятся, как и раньше.

- Переключите свойство конфигурации `Использовать управляемые формы в обычном приложении` в `Истина`.
- Переключите свойство конфигурации `Использовать обычные формы в управляемом режиме` в `Ложь`.
- Создавайте общие модули по стандарту [#std469: Правила создания общих модулей](https://v8std.ru/std/469/)
- Пользуйтесь режимом редактирования для режимов запуска `управляемое и обычное приложение`. Включите в меню `Сервис` – `Параметры` – закладка `Общие`.

#### 1.5.

Не делайте пользовательские интерфейсы сильно отличающимися от интерфейса по умолчанию. Это может пугать пользователей.

#### 2.1.

Пишите тексты грамотно. Не допускайте ошибок.

#### 2.2.

Не оставляйте после себя мертвый код и мертвые объекты метаданных. Все, что не используется - удалите.

#### 2.3.

Метаданные верхнего уровня сортируйте по имени. Подчиненные метаданные, реквизиты, измерения, формы - располагайте в соответствии со своим проектным решением.

Исключения:

- Общим реквизитам разделителям установите порядок в дереве метаданных в зависимости от требуемого порядка установки параметров сеанса. [#std677: Использование общих реквизитов](https://v8std.ru/std/677/)
- Устаревшие объекты размещайте в конце ветки метаданных. [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/)

#### Проверки
[#bslls:OrdinaryAppSupport](https://v8std.ru/diagnostics/bslls/OrdinaryAppSupport/)
[#bslls:WrongDataPathForFormElements](https://v8std.ru/diagnostics/bslls/WrongDataPathForFormElements/)
[#v8cs:form-module-missing-pragma](https://v8std.ru/diagnostics/v8-code-style/form-module-missing-pragma/)
[#v8cs:ql-like-expression-with-field](https://v8std.ru/diagnostics/v8-code-style/ql-like-expression-with-field/)
[#v8cs:redundant-export-method](https://v8std.ru/diagnostics/v8-code-style/redundant-export-method/)

[#acc:8](https://v8std.ru/diagnostics/acc/8/)
[#acc:82](https://v8std.ru/diagnostics/acc/82/)
[#acc:87](https://v8std.ru/diagnostics/acc/87/)
[#acc:216](https://v8std.ru/diagnostics/acc/216/)
[#acc:235](https://v8std.ru/diagnostics/acc/235/)
[#acc:265](https://v8std.ru/diagnostics/acc/265/)
[#acc:277](https://v8std.ru/diagnostics/acc/277/)
[#acc:278](https://v8std.ru/diagnostics/acc/278/)
[#acc:299](https://v8std.ru/diagnostics/acc/299/)
[#acc:321](https://v8std.ru/diagnostics/acc/321/)
[#acc:323](https://v8std.ru/diagnostics/acc/323/)
[#acc:324](https://v8std.ru/diagnostics/acc/324/)
[#acc:355](https://v8std.ru/diagnostics/acc/355/)
[#acc:376](https://v8std.ru/diagnostics/acc/376/)
[#acc:377](https://v8std.ru/diagnostics/acc/377/)
[#acc:379](https://v8std.ru/diagnostics/acc/379/)
[#acc:380](https://v8std.ru/diagnostics/acc/380/)
[#acc:470](https://v8std.ru/diagnostics/acc/470/)
[#acc:524](https://v8std.ru/diagnostics/acc/524/)
[#acc:525](https://v8std.ru/diagnostics/acc/525/)
[#acc:526](https://v8std.ru/diagnostics/acc/526/)
[#acc:527](https://v8std.ru/diagnostics/acc/527/)
[#acc:531](https://v8std.ru/diagnostics/acc/531/)
[#acc:557](https://v8std.ru/diagnostics/acc/557/)
[#acc:558](https://v8std.ru/diagnostics/acc/558/)
[#acc:559](https://v8std.ru/diagnostics/acc/559/)
[#acc:561](https://v8std.ru/diagnostics/acc/561/)
[#acc:562](https://v8std.ru/diagnostics/acc/562/)
[#acc:563](https://v8std.ru/diagnostics/acc/563/)
[#acc:564](https://v8std.ru/diagnostics/acc/564/)
[#acc:565](https://v8std.ru/diagnostics/acc/565/)
[#acc:566](https://v8std.ru/diagnostics/acc/566/)
[#acc:567](https://v8std.ru/diagnostics/acc/567/)
[#acc:568](https://v8std.ru/diagnostics/acc/568/)
[#acc:569](https://v8std.ru/diagnostics/acc/569/)
[#acc:570](https://v8std.ru/diagnostics/acc/570/)
[#acc:571](https://v8std.ru/diagnostics/acc/571/)
[#acc:572](https://v8std.ru/diagnostics/acc/572/)
[#acc:573](https://v8std.ru/diagnostics/acc/573/)
[#acc:574](https://v8std.ru/diagnostics/acc/574/)
[#acc:580](https://v8std.ru/diagnostics/acc/580/)
[#acc:581](https://v8std.ru/diagnostics/acc/581/)
[#acc:1026](https://v8std.ru/diagnostics/acc/1026/)
[#acc:1027](https://v8std.ru/diagnostics/acc/1027/)
[#acc:1028](https://v8std.ru/diagnostics/acc/1028/)
[#acc:1030](https://v8std.ru/diagnostics/acc/1030/)
[#acc:1032](https://v8std.ru/diagnostics/acc/1032/)
[#acc:1033](https://v8std.ru/diagnostics/acc/1033/)
[#acc:1034](https://v8std.ru/diagnostics/acc/1034/)
[#acc:1035](https://v8std.ru/diagnostics/acc/1035/)
[#acc:1036](https://v8std.ru/diagnostics/acc/1036/)
[#acc:1037](https://v8std.ru/diagnostics/acc/1037/)
[#acc:1038](https://v8std.ru/diagnostics/acc/1038/)
[#acc:1108](https://v8std.ru/diagnostics/acc/1108/)
[#acc:1349](https://v8std.ru/diagnostics/acc/1349/)
[#acc:1350](https://v8std.ru/diagnostics/acc/1350/)
[#acc:1351](https://v8std.ru/diagnostics/acc/1351/)
[#acc:1352](https://v8std.ru/diagnostics/acc/1352/)
[#acc:1374](https://v8std.ru/diagnostics/acc/1374/)
#### Источник

https://its.1c.ru/db/v8std#content:467

Орфографическая ошибка в заголовке формы. АПК:1026

Орфографическая ошибка в заголовке элемента формы. АПК:1027

Орфографическая ошибка в колонке табличного поля. АПК:1028

Орфографическая ошибка в подсказке элемента управления. АПК:1030

Орфографическая ошибка в синониме объекта метаданных. АПК:1032

Орфографическая ошибка в комментарии объекта метаданных. АПК:1033

Орфографическая ошибка в тексте встроенной справки. АПК:1034

Орфографическая ошибка в тексте макета. АПК:1035

Орфографическая ошибка в тексте модуля. АПК:1036

Орфографическая ошибка в видимой колонке табличного поля. АПК:1037

Орфографическая ошибка в тексте видимого элемента формы. АПК:1038

Нарушена сортировка объектов метаданных верхнего уровня по имени по возрастанию в дереве метаданных. АПК:1108

В качестве параметра обработчика оповещения указана несуществующая процедура. АПК:1349

В качестве параметра обработчика оповещения указана функция. АПК:1350

В качестве параметра обработчика оповещения указана неэкспортная процедура. АПК:1351

В качестве параметра обработчика оповещения указана процедура без параметров. АПК:1352

Некорректное использование платформенного метода "Тип()". АПК:1374

Слово содержит кириллицу и латиницу. АПК:216

Орфографическая ошибка в имени элемента формы. АПК:235

Орфографическая ошибка в имени объекта метаданных. АПК:265

Недопустимый вызов служебной процедуры или функции другой подсистемы. АПК:277

Недопустимый вызов служебного программного интерфейса. АПК:278

Возможно, неиспользуемая экспортная процедура (функция). АПК:299

Термин "1C:Предприятие" ошибочно задан с латинской "C". АПК:321

Орфографическая ошибка в заголовке команды формы. АПК:323

Орфографическая ошибка в подсказке команды формы. АПК:324

Орфографическая ошибка в имени команды формы. АПК:355

Превышена максимальная длина числовых данных (31 знак). АПК:376

Превышена максимальная длина ресурса регистра накопления или бухгалтерии (25 знаков). АПК:377

В качестве правого операнда операции сравнения "ПОДОБНО" указано поле таблицы. АПК:379

Длина индекса составляет больше 900 байт. АПК:380

Превышена максимальная длина числовых данных в запросе (31 знак). АПК:470

Некорректно заполнено свойство "Путь к данным" у поля динамического списка. АПК:524

Некорректно заполнено свойство "Данные" у кнопки, связанной с полем динамического списка. АПК:525

У процедуры (функции) в модуле формы отсутствует директива компиляции. АПК:526

В качестве параметра обработчика оповещения указана серверная процедура. АПК:527

Избыточное обращение внутри модуля через его имя или псевдоним ЭтотОбъект (к методу, свойству или реквизиту). АПК:531

Экспортная процедура (функция) из модуля с признаком "ВызовСервера" не вызывается на клиенте. АПК:557

Экспортная процедура (функция) из модуля с признаком "КлиентСервер" не вызывается на клиенте. АПК:558

Экспортная процедура (функция) из модуля с признаком "КлиентСервер" не вызывается на сервере. АПК:559

Ошибка платформенной проверки конфигурации. АПК:561

Ошибка платформенной проверки конфигурации: Возможно ошибочное свойство. АПК:562

Ошибка платформенной проверки конфигурации: Возможно ошибочный метод. АПК:563

Ошибка платформенной проверки конфигурации: Возможно ошибочный параметр. АПК:564

Ошибка платформенной проверки конфигурации: Использование модального вызова. АПК:565

Ошибка платформенной проверки конфигурации: Использование синхронного вызова. АПК:566

Ошибка платформенной проверки конфигурации: Не обнаружено ссылок на процедуру. АПК:567

Ошибка платформенной проверки конфигурации: Не обнаружено ссылок на функцию. АПК:568

Ошибка платформенной проверки конфигурации: Неразрешимые ссылки на объекты метаданных. АПК:569

Ошибка платформенной проверки конфигурации: Отсутствует обработчик. АПК:570

Ошибка платформенной проверки конфигурации: Переменная не определена. АПК:571

Ошибка платформенной проверки конфигурации: Процедура или функция с указанным именем не определена. АПК:572

Ошибка платформенной проверки конфигурации: Пустой обработчик. АПК:573

Ошибка платформенной проверки конфигурации: (Проверка: Мобильный клиент). АПК:574

Нет вызовов служебной экспортной процедуры (функции). АПК:580

Избыточное ключевое слово "Экспорт". АПК:581

Имя содержит букву "ё". АПК:8

Не установлено свойство "Использовать управляемые формы в обычном приложении" для конфигурации. АПК:82

Орфографическая ошибка в подсказке объекта метаданных. АПК:87

Поддержка обычного приложения BSLLS:OrdinaryAppSupport

У полей формы не указан путь к данным BSLLS:WrongDataPathForFormElements

Всегда использовать директивы компиляции в модуле формы (form-module-missing-pragma)

В качестве правого операнда операции сравнения "ПОДОБНО" указано поле таблицы. (ql-like-expression-with-field)

Тексты модулей конфигурации не должны содержать неиспользуемые экспортные процедуры и функции. (redundant-export-method)

Правила создания общих модулей #std469

Обработчики событий модуля формы, подключаемые из кода #std492

Удаление устаревших объектов метаданных из конфигурации #std534

Использование общих реквизитов #std677

Ограничение на установку признака «Вызов сервера» у общих модулей #std679

Особенности разработки конфигураций для ОС Linux и macOS #std723

Несущественные предупреждения проверки конфигурации #std759

Общие требования к конфигурации #std467


стандарт 469

ID: #std469

# Правила создания общих модулей

#### 1.1.

Общие модули создавайте для процедур и функций, объединенных по одному признаку.
Обычно в один модуль попадает код:

- одной [подсистемы конфигурации](https://v8std.ru/std/543/)
- или одного функционального назначения (например, работа со строками, общие сервисные функции).

#### 1.2.

При разработке общих модулей выбирайте один из четырех контекстов выполнения.

#### Серверный
Свойства:

- [ ] `Клиент (управляемое приложение)`
- [x] `Сервер`
- [x] `Внешнее соединение`
- [x] `Клиент (обычное приложение)`
- [ ] `Вызов сервера`

Назначение: внутренняя серверная бизнес-логика, недоступная клиентскому коду.

Пример имени: `ОбщегоНазначения` (или `ОбщегоНазначенияСервер`).

#### Серверный для вызова с клиента
Свойства:

- [ ] `Клиент (управляемое приложение)`
- [x] `Сервер`
- [ ] `Внешнее соединение`
- [ ] `Клиент (обычное приложение)`
- [x] `Вызов сервера`

Назначение: серверные процедуры и функции, доступные из клиентского кода.

Пример имени: `ОбщегоНазначенияВызовСервера`.

#### Клиентский
Свойства:

- [x] `Клиент (управляемое приложение)`
- [ ] `Сервер`
- [ ] `Внешнее соединение`
- [x] `Клиент (обычное приложение)`
- [ ] `Вызов сервера`

Назначение: клиентская бизнес-логика.

Пример имени: `ОбщегоНазначенияКлиент` (или `ОбщегоНазначенияГлобальный`).

#### Клиент-серверный
Свойства:

- [x] `Клиент (управляемое приложение)`
- [x] `Сервер`
- [x] `Внешнее соединение`
- [x] `Клиент (обычное приложение)`
- [ ] `Вызов сервера`

Назначение: единый код, одинаково выполняемый на клиенте и сервере.

Пример имени: `ОбщегоНазначенияКлиентСервер`.

#### 2.1.

**Серверные общие модули** используйте для внутренней серверной бизнес-логики,
которая недоступна клиентскому коду.

Модули должны быть доступны в управляемом приложении, обычном приложении и внешнем соединении.

- [ ] `Вызов сервера` выключен

    чтобы обеспечить корректный вызов процедур и функций,
    которые работают с мутабельными типами (`СправочникОбъект`, `ДокументОбъект` и т.п.).

Типовые случаи:

- обработчики подписок на события, принимающие объект;
- серверные процедуры и функции, которым объект передается из модулей объектов,
  подписок на события и аналогичных серверных сценариев.

Именуйте такие модули по [общим правилам именования](https://v8std.ru/std/474/)

#### Примеры

`РаботаСФайлами`, `FilesOperations`.

Если возможен конфликт имен с глобальным контекстом,
допускается постфикс `Сервер` (`Server`).

#### Примеры

`РегламентныеЗаданияСервер`, `ScheduledJobsServer`.

#### 2.2.

**Серверные общие модули для вызова с клиента** содержат серверные процедуры и функции,
которые образуют клиентский API сервера.

- [x] `Вызов сервера` включен
- [ ] `Внешнее соединение` выключен
- [ ] `Клиент (обычное приложение)` выключен

Именуйте по [общим правилам именования](https://v8std.ru/std/474/)
с обязательным постфиксом `ВызовСервера` (`ServerCall`).

#### Примеры

`РаботаСФайламиСлужебныйВызовСервера`, `FilesOperationsInternalServerCall`.

Экспортные процедуры и функции в таких модулях
не должны принимать мутабельные типы (`СправочникОбъект`, `ДокументОбъект` и т.п.),
потому что их нельзя передавать между клиентом и сервером.

#### Проверки
[#v8cs:common-module-name-cached](https://v8std.ru/diagnostics/v8-code-style/common-module-name-cached/)
[#v8cs:common-module-name-client-cached](https://v8std.ru/diagnostics/v8-code-style/common-module-name-client-cached/)
[#v8cs:common-module-name-server-call-cached](https://v8std.ru/diagnostics/v8-code-style/common-module-name-server-call-cached/)
[#v8cs:common-module-name-server-call](https://v8std.ru/diagnostics/v8-code-style/common-module-name-server-call/)
[#v8cs:extension-md-object-prefix](https://v8std.ru/diagnostics/v8-code-style/extension-md-object-prefix/)

#### См. также

- [#std679: Ограничение на установку признака «Вызов сервера» у общих модулей](https://v8std.ru/std/679/)
- [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/)

#### 2.3.

**Клиентские общие модули** содержат клиентскую бизнес-логику.

- [x] `Клиент (управляемое приложение)`
- [x] `Клиент (обычное приложение)`

Исключения допустимы, если код должен быть доступен только
в одном режиме (только управляемое, только обычное, только внешнее соединение).

Используйте постфикс `Клиент` (`Client`).

#### Примеры

`РаботаСФайламиКлиент`, `FilesOperationsClient`.

См. также: [минимизация кода, выполняемого на клиенте](https://its.1c.ru/db/v8std/content/629/hdoc).

#### 2.4.

Чтобы [избежать дублирования кода](https://its.1c.ru/db/v8std/content/440/hdoc),
используйте **клиент-серверные общие модули** для процедур и функций,
чей код одинаков на сервере и на клиенте.

- [ ] `Вызов сервера` выключен

Используйте постфикс `КлиентСервер` (`ClientServer`).

#### Примеры

`РаботаСФайламиКлиентСервер`, `FilesOperationsClientServer`.

Если в таком модуле появляется ветвление клиент/сервер,
не используйте для этого инструкции препроцессора.

Разделяйте отличающуюся функциональность по модулям соответствующего типа
(по правилам п. [2.1](https://v8std.ru/std/469/#21) и [2.3](https://v8std.ru/std/469/#23))

Такой подход повышает модульность,
упрощает контроль клиент-серверного взаимодействия
и снижает риск ошибок из-за различий клиентского и серверного кода.

Подробнее: [Использование директив компиляции и инструкций препроцессора](https://its.1c.ru/db/v8std/content/439/hdoc).

Особый случай смешанных модулей:,
где клиентская и серверная логика осознанно расположены в одном модуле.

#### 3.1.

Имена общих модулей формируйте по общим правилам именования.
Название модуля должно совпадать с названием подсистемы
или механизма, который он реализует.

Избегайте общих слов:

- `Процедуры`;
- `Функции`;
- `Обработчики`;
- `Модуль`;
- `Функциональность`.

Используйте такие слова только в исключительных случаях,
когда они реально уточняют назначение.

Чтобы различать модули одной подсистемы в разных контекстах,
применяйте постфиксы из пп. [2.1](https://v8std.ru/std/469/#21)-[2.4](https://v8std.ru/std/469/#24)

#### 3.2.

Дополнительно к базовым постфиксам допускаются уточняющие постфиксы.

#### 3.2.1.

Для глобальных модулей используйте постфикс `Глобальный` (`Global`).
Постфикс `Клиент` в этом случае не добавляйте.

Свойства:

- [x] `Глобальный`

#### Примеры

`РаботаСФайламиСлужебныйГлобальный`, `FilesOperationsInternalGlobal`.

#### Проверки
[#v8cs:common-module-name-global-client](https://v8std.ru/diagnostics/v8-code-style/common-module-name-global-client/)

#### 3.2.2.

Для модулей с признаком `Привилегированный`
используйте постфикс `ПолныеПрава` (`FullAccess`).

Свойства:

- [x] `Привилегированный`

#### Примеры

`РаботаСФайламиСлужебныйПолныеПрава`, `FilesOperationsInternalFullAccess`.

#### Проверки
[#v8cs:common-module-name-full-access](https://v8std.ru/diagnostics/v8-code-style/common-module-name-full-access/)

#### 3.2.3.

Для модулей с функциями повторного использования возвращаемых значений
используйте постфиксы:

- `ПовтИсп` (`Cached`) — для серверного варианта;
- `КлиентПовтИсп` (`ClientCached`) — для клиентского варианта.

Свойства:

- [x] `Повторное использование возвращаемых значений`

#### Примеры

`РаботаСФайламиСлужебныйКлиентПовтИсп`, `FilesOperationsInternalClientCached`.

#### См. также

- [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/)

#### 3.2.4.

В библиотечных конфигурациях для модулей,
чью реализацию допускается изменять,
используйте постфиксы:

- `Переопределяемый` (`Overridable`);
- `КлиентПереопределяемый` (`ClientOverridable`).

#### Примеры

`РаботаСФайламиКлиентПереопределяемый`, `FilesOperationsClientOverridable`.

#### См. также

- [#std553: Переопределяемые и поставляемые объекты библиотеки](https://v8std.ru/std/553/)

#### 3.2.5.

В [локализуемых конфигурациях](https://its.1c.ru/db/v8std/content/769/hdoc),
которые выпускаются для разных стран и регионов,
модули национальной специфики именуйте с постфиксами:

- `Локализация` (`Localization`);
- `КлиентЛокализация` (`ClientLocalization`).

#### Примеры

`ЭлектроннаяПодписьСлужебныйЛокализация`, `ElectronicSignatureInternalLocalization`.

#### См. также

- [#std456: Тексты модулей](https://v8std.ru/std/456/)
- [#std455: Структура модуля](https://v8std.ru/std/455/)

#### Проверки
[#bslls:CommonModuleInvalidType](https://v8std.ru/diagnostics/bslls/CommonModuleInvalidType/)
[#bslls:CommonModuleNameCached](https://v8std.ru/diagnostics/bslls/CommonModuleNameCached/)
[#bslls:CommonModuleNameClientServer](https://v8std.ru/diagnostics/bslls/CommonModuleNameClientServer/)
[#bslls:CommonModuleNameClient](https://v8std.ru/diagnostics/bslls/CommonModuleNameClient/)
[#bslls:CommonModuleNameFullAccess](https://v8std.ru/diagnostics/bslls/CommonModuleNameFullAccess/)
[#bslls:CommonModuleNameGlobalClient](https://v8std.ru/diagnostics/bslls/CommonModuleNameGlobalClient/)
[#bslls:CommonModuleNameGlobal](https://v8std.ru/diagnostics/bslls/CommonModuleNameGlobal/)
[#bslls:CommonModuleNameServerCall](https://v8std.ru/diagnostics/bslls/CommonModuleNameServerCall/)
[#bslls:CommonModuleNameWords](https://v8std.ru/diagnostics/bslls/CommonModuleNameWords/)

[#acc:73](https://v8std.ru/diagnostics/acc/73/)
[#acc:80](https://v8std.ru/diagnostics/acc/80/)
[#acc:83](https://v8std.ru/diagnostics/acc/83/)
[#acc:84](https://v8std.ru/diagnostics/acc/84/)
[#acc:85](https://v8std.ru/diagnostics/acc/85/)
[#acc:90](https://v8std.ru/diagnostics/acc/90/)
[#acc:125](https://v8std.ru/diagnostics/acc/125/)
[#acc:363](https://v8std.ru/diagnostics/acc/363/)
[#acc:547](https://v8std.ru/diagnostics/acc/547/)
[#acc:1245](https://v8std.ru/diagnostics/acc/1245/)
#### Источник

https://its.1c.ru/db/v8std#content:469

Общий модуль, доступный на сервере и на клиенте, должен именоваться с постфиксом "КлиентСервер". АПК:1245

Общий модуль недопустимого типа. АПК:125

Не следует добавлять постфикс "Клиент" в наименование глобального общего модуля с постфиксом "Глобальный". АПК:363

Использована инструкция препроцессора в клиент-серверном общем модуле. АПК:547

Рекомендуется избегать в названии общего модуля таких общих слов как "Процедуры", "Функции", "Обработчики", "Модуль", "Функциональность" и т.п. АПК:73

Общий модуль, доступный только на клиенте, должен именоваться с постфиксом "Клиент". АПК:80

Глобальный общий модуль должен именоваться с постфиксом "Глобальный". АПК:83

Привилегированный общий модуль должен именоваться с постфиксом "ПолныеПрава". АПК:84

Общий модуль с повторно используемыми значениями должен именоваться с постфиксом "ПовтИсп". АПК:85

Общий модуль, для которого предусмотрен вызов сервера, должен именоваться с постфиксом "ВызовСервера". АПК:90

Общий модуль недопустимого типа BSLLS:CommonModuleInvalidType

Пропущен постфикс "ПовтИсп" BSLLS:CommonModuleNameCached

Пропущен постфикс "Клиент" BSLLS:CommonModuleNameClient

Пропущен постфикс "КлиентСервер" BSLLS:CommonModuleNameClientServer

Пропущен постфикс "ПолныеПрава" BSLLS:CommonModuleNameFullAccess

Пропущен постфикс "Глобальный" BSLLS:CommonModuleNameGlobal

Глобальный модуль с постфиксом "Клиент" BSLLS:CommonModuleNameGlobalClient

Пропущен постфикс "ВызовСервера" BSLLS:CommonModuleNameServerCall

Нерекомендуемое имя общего модуля BSLLS:CommonModuleNameWords

Общий модуль с повторно используемыми значениями (common-module-name-cached)

Клиентский общий модуль с повторно используемыми значениями (common-module-name-client-cached)

Привилегированный общий модуль должен оканчиваться на суффикс ПолныеПрава (common-module-name-full-access)

Глобальный клиентский общий модуль должен оканчиваться на суффикс Глобальный без суффикса Клиент (common-module-name-global-client)

Общий модуль, для которого предусмотрен вызов сервера (common-module-name-server-call)

Общий модуль с повторно используемыми значениями (common-module-name-server-call-cached)

У имени объекта отсутствует префикс расширения (extension-md-object-prefix)

Структура модуля #std455

Тексты модулей #std456

Имя, синоним, комментарий #std474

Использование подсистем #std543

Переопределяемые и поставляемые объекты библиотеки #std553

Обеспечение совместимости библиотек #std644

Ограничение на установку признака «Вызов сервера» у общих модулей #std679

Правила создания общих модулей #std469


стандарт 470

ID: #std470

# Использование функциональных опций

#### 1.1.

Если часть функциональности конфигурации может быть необязательной,
управляйте ее доступностью через функциональные опции.

Значения функциональных опций храните в данных информационной базы
(например, в константах).

#### Пример настройки для опционального версионирования

- Создать функциональную опцию `ИспользоватьВерсионированиеОбъектов`.
- Создать константу `ИспользоватьВерсионированиеОбъектов` типа `Булево`.
- В свойстве `Хранение` функциональной опции указать эту константу.

После этого объекты конфигурации можно включать в состав функциональной опции,
а в коде использовать `ПолучитьФункциональнуюОпцию()`:

```bsl
ИспользуетсяМеханизмВерсионирования =
    ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов");
```

Функциональные опции автоматически влияют на доступность элементов интерфейса.
Также они могут управлять бизнес-логикой, и не только для типа `Булево`.

#### 1.2.

Доступность функциональности можно задавать не только для всей базы,
но и по контексту (например, по организации).

#### Пример параметризованной функциональной опции

Для управления сложным учетом НДС по организациям:

- создать функциональную опцию `УчетнаяПолитикаСложныйУчетНДС`;
- создать параметр функциональной опции `Организация`;
- создать регистр сведений `УчетнаяПолитикаНалоговыйУчет`
  с измерением `Организация` и нужными ресурсами;
- в свойстве `Хранение` функциональной опции указать ресурс `СложныйУчетНДС`;
- для параметра `Организация` в свойстве `Использование` указать
  измерение `Организация` регистра `УчетнаяПолитикаНалоговыйУчет`.

#### Пример структуры хранения

Изображение: Пример регистра сведений для хранения функциональной опции (470.option-storage-example.jpg)

Чтобы значение опции соответствовало контексту формы,
устанавливайте параметры функциональных опций формы:

```bsl
УстановитьПараметрыФункциональныхОпцийФормы(
    Новый Структура("Организация", <ТребуемаяОрганизация>));
```

Для управления доступностью кода по такой опции получайте значения с параметрами:

```bsl
ПараметрыУчетнойПолитики = Новый Структура("УчетнаяПолитикаОрганизация", <ТребуемаяОрганизация>);
СложныйУчетНДС = ПолучитьФункциональнуюОпцию("УчетнаяПолитикаСложныйУчетНДС", ПараметрыУчетнойПолитики);
МоментОпределенияНалоговойБазыНДС = ПолучитьФункциональнуюОпцию(
    "УчетнаяПолитикаМоментОпределенияНалоговойБазыНДС", ПараметрыУчетнойПолитики);
```

#### Примечание

Приведенный вариант не является единственным.
Для сложных сценариев сверяйтесь с документацией платформы `1С:Предприятие`.

#### 1.3.

Не используйте функциональные опции не по назначению.

- Не создавайте их только для видимости элементов одной конкретной формы.
  Функциональные опции управляют доступностью функциональности в конфигурации целиком.
- Не используйте их для оптимизации доступа к данным (как серверное хранилище значений).
Для этого используйте [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/)

## Установка и получение значений функциональных опций

#### 2.1.

Платформа не предоставляет отдельного механизма установки функциональных опций.
Значение функциональной опции задается изменением хранимых данных:
констант, элементов справочников или записей регистров сведений.

В конфигурации нужно реализовать соответствующий интерфейс настройки.

#### 2.2.

Для параметризованных опций учитывайте правила вычисления значения:

- если записи, соответствующей параметру, нет, опция считается выключенной;
- если подходящих записей несколько, итоговое значение складывается по `ИЛИ`.

#### 2.3.

Если опция хранится в ресурсе периодического регистра сведений,
значение берется через срез последних.

Если нужно получать значение на другую дату,
устанавливайте параметр функциональной опции `Период` типа `Дата`:

```bsl
УстановитьПараметрыФункциональныхОпцийФормы(
    Новый Структура("Организация, Период", <ТребуемаяОрганизация>, <ТребуемаяДата>));
```

При этом:

- значение `Период` предварительно приводите к интервалу периодичности регистра (для выполнения [п. 2.5](https://v8std.ru/std/470/#25))
- параметр `Период` в метаданных не создавайте, он предоставляется платформой автоматически.

```bsl
НачалоМесяца(<ТребуемаяДата>)
```

#### 2.4.

Изменение значения функциональной опции не обновляет командный интерфейс автоматически.
После изменения вызывайте `ОбновитьИнтерфейс`.

#### 2.5.

Значения функциональных опций кешируются на сервере.
Слишком большой кеш может ухудшить производительность.

Не параметризуйте функциональные опции данными с очень большим числом значений
(например, конкретным контрагентом или товаром).

Рекомендуется параметризовать по признакам,
например по `ВидКонтрагента`, а не по самому контрагенту.

## Зависимые функциональные опции

#### 3.1.

Если одна функциональность зависит от других,
обеспечьте непротиворечивость связанных данных.

#### Пример

Функциональность `Перевод сотрудников` доступна,
когда одновременно включены `Многофирменный учет` и `Кадровый учет`.

В таком случае:

- введите отдельную функциональную опцию `ПереводСотрудников`;
- привяжите нужные объекты к ней;
- реализуйте зависимость ее значения от двух других опций
  (например, при записи соответствующих констант).

Показывайте администратору в форме настройки значения всех зависимых опций.
При этом производную опцию (например, `ПереводСотрудников`) делайте недоступной для ручного редактирования.

Для булевых опций используйте элемент управления `Поле` вида `Поле флажка`
с заголовком, совпадающим с названием опции.

#### 3.2.

Для взаимоисключающих функциональных опций используйте элементы,
позволяющие выбрать одно значение из нескольких:

- `Поле переключателя`;
- `Поле ввода` со списком выбора;
- другой аналогичный элемент выбора.

Заголовки переключателей или значения списка должны совпадать с названиями опций.

#### 3.3.

Если незначительная функциональность сложно зависит от нескольких опций
и ее нельзя назвать понятно для пользователя,
лучше не вводить отдельную функциональную опцию.

В таких случаях зависимость элементов формы реализуйте в коде
(например, при создании формы на сервере),
анализируя значения существующих опций.

## Ограничения на использование параметров функциональных опций

#### 4.1.

По соображениям производительности не рекомендуется иметь более `10` параметров функциональных опций.

Не создавайте разные параметры для одной смысловой нагрузки.

#### Пример

Вместо двух параметров:

- `ТипВерсионируемогоОбъекта` (связан с `РегистрСведений.НастройкаВерсионированияОбъектов.Измерение.ТипОбъекта`);
- `ТипОбъектаСДополнительнымиОтчетамиИОбработками` (связан с `РегистрСведений.НазначениеДополнительныхОбработок.Измерение.ТипОбъекта`);

используйте один параметр `ТипОбъектаКонфигурации`,
связанный с измерениями обоих регистров.

#### 4.2.

При проектировании состава функциональных опций и их параметров придерживайтесь схемы:

- определить, какая функциональность действительно опциональна;
- определить, где нужен один общий выключатель, а где параметризация по контексту;
- составить список всех параметризованных опций и их параметров;
- исключить дубли параметров одного типа и назначения;
- если параметров слишком много, ранжировать их по востребованности и важности;
- исключить менее востребованные параметры;
- для опций без параметров принять решение:
  сделать их непараметризованными (включение по базе в целом) или удалить.

Итогом должен быть ограниченный и управляемый набор параметров функциональных опций.

#### См. также

- [#std491: Влияние изменения значений параметров сеанса и функциональных опций на производительность механизма ограничения доступа к данным](https://v8std.ru/std/491/)

#### Источник

https://its.1c.ru/db/v8std#content:470

Влияние изменения значений параметров сеанса и функциональных опций на производительность механизма ограничения доступа к данным #std491

Использование модулей с повторным использованием возвращаемых значений #std724

Использование функциональных опций #std470


стандарт 473

ID: #std473

# Использование кодов (номеров) объектов конфигурации

Длины кодов (номеров) объектов конфигурации задавайте по их прикладному смыслу.

#### 1.

Необходимость применения кодов (номеров) объектов конфигурации определяйте из прикладной задачи.

#### 1.1.

Пользователям предстоит работать со списками, содержащими большое количество элементов.

Пример: справочник **Номенклатура**.

#### 1.2.

Искать данные по коду (номеру) удобнее, чем по другим свойствам.

Например, для справочника **Статьи расходов** пользователю проще запомнить код, чем каждый раз вчитываться в название статьи. Кроме того, названия статей могут меняться.

#### 1.3.

Код имеет прикладной смысл, продиктованный спецификой автоматизируемой области.

Например, код справочника **Единицы измерения** соответствует коду единицы измерения в ОКЕИ, код справочника **Номера ГТД** соответствует номеру грузовой таможенной декларации.

#### 2.

Автонумерация объектов конфигурации не нужна в следующих случаях.

#### 2.1.

Код используется как краткое строковое представление элемента данных.

Например, для справочника **Пользователи** автонумерация не применяется, так как в коде хранится краткое имя пользователя (логин).

#### 2.2.

Код (номер) приходит из внешних источников (входящие данные).

Например, это классификаторы. Другой пример: справочник **Номера ГТД**, где код вводится по входящим документам.

#### 3.

Длину кода (номера) устанавливайте в зависимости от назначения кода и способа его получения.

#### 3.1.

Для объектов с автонумерацией длину кода (номера) выбирайте исходя из потенциального количества:

- всех объектов в базе;
- объектов в периоде (для документов и бизнес-процессов);
- объектов в пределах владельца (иерархические и подчиненные справочники, задачи).

В длине номера учитывайте длину префиксов нумерации: префикс информационной базы, префикс организации и другие префиксы, если они предусмотрены конфигурацией.

Для типовых конфигураций рекомендуемыми, но не обязательными, являются длины кодов (номеров): `3`, `5`, `9`, `11`.

Если в конфигурации используется подсистема **Префиксация объектов** из **Библиотеки стандартных подсистем**, совокупную длину (с учетом префикса) номеров документов и кодов справочников рекомендуется устанавливать не менее 11 символов (`11`, `13`, `15`, ...). Подробнее см. [документацию к подсистеме «Префиксация объектов» на ИТС](https://its.1c.ru/db/bspdoc).

#### 3.2.

Для объектов, где код используется как краткое строковое представление (см. п. 2.1), длина кода должна быть достаточной для хранения этого представления.

#### 3.3.

Для объектов, где код (номер) приходит из внешних источников (см. п. 2.2), длина зависит от соответствующего источника.

#### 3.4.

Рекомендуется использовать переменную допустимую длину кода (номера).

#### 4.

Если прикладное решение работает с данными, которые могут вводиться параллельно из нескольких мест (в рамках РИБ или в других программах), должна быть реализована автоматическая префиксация объектов конфигурации. Требование относится к объектам, для которых одновременно выполняются условия:

- используется строковый код (номер);
- используется автонумерация;
- данные в области уникальности кодов (номеров) могут вводиться параллельно в разных местах (узлы РИБ, разные программы) и потом консолидироваться, например при синхронизации данных.

Пример области уникальности для большинства документов: организация и период.

Если конфигурация использует **Библиотеку стандартных подсистем**, это требование реализуется подсистемой **Префиксация объектов**.

#### Проверки

[#acc:1206](https://v8std.ru/diagnostics/acc/1206/)
[#acc:1209](https://v8std.ru/diagnostics/acc/1209/)
#### Источник

https://its.1c.ru/db/v8std#content:473

Нестандартная длина кода (номера), проверьте оправданность использования такой длины. АПК:1206

Нестандартная длина номера, проверьте оправданность использования такой длины. АПК:1209

Использование кодов (номеров) объектов конфигурации #std473


стандарт 474

ID: #std474

# Имя, синоним, комментарий

#### 1.1.

Синоним объекта заполняйте обязательно.
Он должен быть осмысленным и лаконичным, чтобы одинаково понятно отображаться в формах, отчетах и командном интерфейсе.

Требование относится не только к объектам метаданных, но и к их реквизитам, табличным частям, измерениям, ресурсам и другим объектам, где есть синоним.

#### Неправильно

`Что`

#### Правильно

`Предмет контроля`

#### 1.2.

Не используйте в синонимах сокращения, кроме общеупотребительных и понятных целевой аудитории, например:

- `Сумма (регл.)`;
- `НДС`;
- `МСФО`.

#### 1.3.

В синонимах и пользовательских сообщениях используйте общепринятые термины.
Не используйте сленг, искаженные названия, русские слова латиницей и англоязычные фразы русскими буквами.

Если для англоязычного термина нет общепринятого русского эквивалента, используйте оригинальный термин.

#### Неправильно

`Загрузка данных из Эксель`
`Загрузка данных из MS Excel`

#### Правильно

`Загрузка данных из Microsoft Excel`

#### 1.4.

Если у объекта есть стандартные реквизиты и табличные части, задавайте для них синонимы по прикладному смыслу.

#### 1.5.

Для стандартных реквизитов `Родитель` и `Владелец` всегда задавайте синонимы, отличные от значений по умолчанию.

#### Неправильно

Для реквизита `Владелец` в справочнике `Файлы` оставить синоним `Владелец`.

#### Правильно

Для того же реквизита задать синоним `Папка` или `Папка с файлом`.

Синоним `Наименование` может подходить не всегда.
Например, для справочника `Файлы` лучше `Имя файла`, для `ФизическиеЛица` - `ФИО`.

#### 1.6.

Если есть два и более схожих объекта, синонимы должны полностью различать их назначение.
Пользователь не должен гадать по названию, о каких данных идет речь.

#### Неправильно

- `Банковские счета`
- `Банковские счета контрагентов`

#### Правильно

- `Банковские счета организаций`
- `Банковские счета контрагентов`

Пример с реквизитами табличной части `Товары` документа `Пересчет товаров`.

#### Неправильно

- `Количество`
- `Количество (по учету)`

#### Правильно

- `Количество (в наличии)`
- `Количество (по учету)`

Пример со стандартным реквизитом `Наименование` и еще одним реквизитом справочника `Номенклатура`.

#### Неправильно

- `Наименование`
- `Полное наименование`

#### Правильно

- `Рабочее наименование`
- `Наименование для печати`

Это правило действует и для подчиненных объектов: реквизитов, табличных частей, измерений, ресурсов.

#### 2.1.

Имя объекта рекомендуется строить на основе синонима:

- убрать пробелы и другие недопустимые в имени символы;
- первые буквы слов сделать прописными.

#### Неправильно

- у справочника `Дополнительные свойства` задано имя `НаборыДополнительныхРеквизитовИСведений`;
- у общей команды `Файлы присоединенные` задано имя `ПрисоединенныеФайлы`.

#### Правильно

- у справочника `Наборы дополнительных реквизитов и сведений` задано имя `НаборыДополнительныхРеквизитовИСведений`;
- у общей команды `Присоединенные файлы` задано имя `ПрисоединенныеФайлы`.

Допустимо, когда имя короче синонима и не включает одно или несколько последних малозначащих слов.

#### Примеры

- `Длительность ожидания сервера (сек)` - `ДлительностьОжиданияСервера`;
- `Количество единиц измерения` - `КоличествоЕдиниц`;
- `Имя реквизита (свойство)` - `Обработки.ГрупповоеИзменениеОбъектов.Операции.ИмяРеквизита`.

Имя также может не включать союзы и предлоги из синонима.

#### Пример

Для реквизита `Значение скидки или наценки` имя `ЗначениеСкидкиНаценки`.

Допустима и обратная ситуация: синоним короче имени, если в синониме убраны последние технические слова.

Это требование нужно для узнаваемости объектов и их представлений в интерфейсе, в том числе на внедрениях, где с конфигурацией работают не разработчики, а технические специалисты.

#### 2.2.

Исключение: объекты метаданных с префиксом `Удалить`.

Не переименовывайте объекты, реквизиты и формы при корректировке синонимов, если действует требование обратной совместимости.

#### 2.3.

Имена объектов метаданных не должны превышать `80` символов.

#### 2.4.

Для подчиненных объектов (реквизиты, измерения, ресурсы) не используйте имена, совпадающие с именами объектов-владельцев.
Имя должно раскрывать прикладной смысл.

#### 2.5.

Не используйте имена, совпадающие с именами таблиц языка запросов (`Документ`, `Справочник`, `РегистрСведений` и т.п.).
Это приводит к ошибкам выполнения и ухудшает читаемость запроса.

#### Пример ошибки

```sdbl
ВЫБРАТЬ
    Сведения.Сведения
ИЗ
    РегистрСведений.Сведения КАК Сведения
```

#### 3.1.

Комментарий задавайте только когда нужно дать разработчику важное пояснение по объекту.

#### Пример

`Индексирование поставлено для оптимизации отчетов с отбором по виду контрагента.`

#### 3.2.

Комментарий начинайте с прописной буквы.
Точки ставьте только после сокращений.

#### 4.

В именах, синонимах и комментариях не используйте букву `ё`.

#### См. также

- [#std478: Подсказка и проверка заполнения](https://v8std.ru/std/478/)
- [#std531: Реквизит "Комментарий" у документов](https://v8std.ru/std/531/)
- [#std550: Имена объектов метаданных в конфигурациях](https://v8std.ru/std/550/)
- [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/)
- [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/)

#### Проверки
[#bslls:ForbiddenMetadataName](https://v8std.ru/diagnostics/bslls/ForbiddenMetadataName/)
[#bslls:MetadataObjectNameLength](https://v8std.ru/diagnostics/bslls/MetadataObjectNameLength/)
[#bslls:SameMetadataObjectAndChildNames](https://v8std.ru/diagnostics/bslls/SameMetadataObjectAndChildNames/)
[#v8cs:md-standard-attribute-synonym-empty](https://v8std.ru/diagnostics/v8-code-style/md-standard-attribute-synonym-empty/)
[#v8cs:mdo-ru-name-unallowed-letter](https://v8std.ru/diagnostics/v8-code-style/mdo-ru-name-unallowed-letter/)

[#acc:5](https://v8std.ru/diagnostics/acc/5/)
[#acc:6](https://v8std.ru/diagnostics/acc/6/)
[#acc:7](https://v8std.ru/diagnostics/acc/7/)
[#acc:8](https://v8std.ru/diagnostics/acc/8/)
[#acc:58](https://v8std.ru/diagnostics/acc/58/)
[#acc:86](https://v8std.ru/diagnostics/acc/86/)
[#acc:347](https://v8std.ru/diagnostics/acc/347/)
[#acc:349](https://v8std.ru/diagnostics/acc/349/)
[#acc:350](https://v8std.ru/diagnostics/acc/350/)
[#acc:351](https://v8std.ru/diagnostics/acc/351/)
[#acc:352](https://v8std.ru/diagnostics/acc/352/)
[#acc:353](https://v8std.ru/diagnostics/acc/353/)
[#acc:354](https://v8std.ru/diagnostics/acc/354/)
[#acc:381](https://v8std.ru/diagnostics/acc/381/)
[#acc:1151](https://v8std.ru/diagnostics/acc/1151/)
[#acc:1207](https://v8std.ru/diagnostics/acc/1207/)
[#acc:1208](https://v8std.ru/diagnostics/acc/1208/)
[#acc:1218](https://v8std.ru/diagnostics/acc/1218/)
#### Источник

https://its.1c.ru/db/v8std#content:474

Не задан синоним объекта метаданных. АПК:1151

Совпадают имена у объекта метаданных и его составляющей. АПК:1207

Присвоено нерекомендуемое имя. АПК:1208

Объект метаданных является демонстрационным. АПК:1218

Не задан синоним стандартного реквизита "Родитель". АПК:347

Синоним стандартного реквизита "Владелец" совпадает с наименованием. АПК:349

Синоним стандартного реквизита "Родитель" совпадает с наименованием. АПК:350

Бессмысленное (автосгенерированное) имя элемента формы. АПК:351

Бессмысленное (автосгенерированное) имя реквизита формы. АПК:352

Бессмысленное (автосгенерированное) имя команды формы. АПК:353

Бессмысленное (автосгенерированное) имя параметра формы. АПК:354

Длина имени объекта метаданных превышает 80 символов. АПК:381

Комментарий должен начинаться с прописной буквы. АПК:5

Имя неверно образовано из синонима. АПК:58

Комментарий содержит букву "ё". АПК:6

Синоним содержит букву "ё". АПК:7

Имя содержит букву "ё". АПК:8

Не задан синоним стандартного реквизита "Владелец". АПК:86

Объекту метаданных присвоено запрещенное имя BSLLS:ForbiddenMetadataName

Имена объектов метаданных не должны превышать допустимой длины наименования BSLLS:MetadataObjectNameLength

Совпадает имя объекта метаданного и его дочернего BSLLS:SameMetadataObjectAndChildNames

Не задан синоним стандартного реквизита "Родитель" или "Владелец". (md-standard-attribute-synonym-empty)

Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных (mdo-ru-name-unallowed-letter)

Подсказка и проверка заполнения #std478

Реквизит «Комментарий» у документов #std531

Удаление устаревших объектов метаданных из конфигурации #std534

Имена объектов метаданных в конфигурациях #std550

Обеспечение совместимости библиотек #std644

Имя, синоним, комментарий #std474


стандарт 477

ID: #std477

# Самодостаточность регистров

При проектировании структуры регистров придерживайтесь правила: регистр должен быть логически независим от регистраторов.

Любая логика по данным регистра и любые отчеты по нему не должны обращаться к полям регистратора. Для работы должно быть достаточно данных самого регистра.

Обращение к полям регистратора через точку приводит к неявным соединениям с дополнительными таблицами. Кроме того, в распределенной информационной базе регистратора может не быть: движения регистров могут мигрировать между узлами, а регистраторы - нет.

#### См. также

- [#std654: Разыменование ссылочных полей составного типа в языке запросов](https://v8std.ru/std/654/)
- [#std701: Разработка планов обмена с отборами](https://v8std.ru/std/701/)

#### Проверки

[#acc:123](https://v8std.ru/diagnostics/acc/123/)
#### Источник

https://its.1c.ru/db/v8std#content:477

Обращение к полям регистратора. АПК:123

Разыменование ссылочных полей составного типа в языке запросов #std654

Разработка планов обмена с отборами #std701

Самодостаточность регистров #std477


стандарт 478

ID: #std478

# Подсказка и проверка заполнения

#### 1.1.

Свойство `Подсказка` задавайте только для тех реквизитов и объектов, которые пользователь видит в интерфейсе и для которых действительно нужно пояснение.

Не добавляйте подсказки для реквизитов, с которыми пользователь работает ежедневно.
В тексте подсказки не пишите инструкции по работе. Вместо этого улучшайте сценарий использования реквизита.

Удаляйте бессмысленные автосгенерированные подсказки элементов формы, например `Группа шапка`.

#### См. также

#### 2.1.

Для типизированных объектов метаданных, стандартных реквизитов и табличных частей, которые обязательны по логике объекта, устанавливайте свойство `Проверка заполнения = Выдавать ошибку`.

#### Пример

Для документа `Заказ клиента` реквизит `Клиент` и табличная часть `Товары` должны быть обязательными.
Заказ без этих данных методически не имеет смысла.

#### 2.2.

Описывайте ограничения максимально в метаданных.
Если хотя бы один сценарий требует обязательного заполнения, ставьте `Проверка заполнения = Выдавать ошибку`.

Сценарии, где реквизит может быть необязательным, обрабатывайте в [#std463: Обработчик события ОбработкаПроверкиЗаполнения](https://v8std.ru/std/463/)

#### Неправильно

Устанавливать `Проверка заполнения = Не проверять` и реализовывать обязательность только кодом в `ОбработкаПроверкиЗаполнения`.

#### Правильно

Устанавливать `Проверка заполнения = Выдавать ошибку`, а условные исключения задавать в `ОбработкаПроверкиЗаполнения`.

#### 2.3.

Если проверка заполнения зависит от условий, управляйте автопометкой незаполненного значения через условное оформление формы.
Убирайте пометку, когда для текущего состояния объекта заполнение не требуется.

#### См. также

- [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/)

#### Проверки

[#acc:59](https://v8std.ru/diagnostics/acc/59/)
[#acc:447](https://v8std.ru/diagnostics/acc/447/)
#### Источник

https://its.1c.ru/db/v8std#content:478

Свойство Подсказка задавайте только для тех реквизитов и объектов, которые пользователь видит в интерфейсе и для которых действительно нужно пояснение.

У элемента формы бессмысленная подсказка. АПК:447

Подсказка совпадает с синонимом. АПК:59

Обработчик события ОбработкаПроверкиЗаполнения #std463

Имя, синоним, комментарий #std474

Подсказка и проверка заполнения #std478


стандарт 480

ID: #std480

# Оформление карты маршрута бизнес-процесса

Пример оформления бизнес-процесса:

Изображение: Пример карты маршрута (480.img1.jpg)

#### 1.

## Общие рекомендации

#### 1.1.

Бизнес-процессы рисуйте сверху вниз. Другая ориентация (например, слева направо) допустима, если так процесс получается нагляднее.

#### 1.2.

Используйте стандартную сетку: шаг 20 точек, линии сетки включены.

#### 1.3.

Не используйте жирные и разноцветные шрифты.

#### 1.4.

Количество изгибов соединительных линий должно быть минимальным. Если точки можно соединить линией с одним изгибом, выбирайте этот вариант, подгоняя размеры и положение точек.

#### 1.5.

При размещении декораций и точек маршрута соблюдайте отступ в одну клетку от левого и верхнего края карты маршрута.

#### 1.6.

Ширину точек маршрута делайте равной четному количеству клеток. Это нужно, чтобы соединительные линии сходились без лишних изгибов.

Размеры точек и декораций старайтесь приближать к пропорциям спичечного коробка (например, 3х6 клеток). Избегайте сильно вытянутых по вертикали или горизонтали точек: они ухудшают восприятие схемы.

#### 1.7.

Текст в точках маршрута и декорациях выравнивайте по центру (по умолчанию). Исключение: комментарии, для них лучше использовать выравнивание влево.

#### 1.8.

Размещайте декорации и точки маршрута так, чтобы они не пересекали границы печатного листа (меню **Графическая схема - Режим просмотра страниц**).

#### 2.

## Рекомендации по оформлению отдельных элементов

#### 2.1.

Точки **Старт** и **Завершение** устанавливайте размером 2х2 клетки, без наименования. Количество таких точек определяется логикой бизнес-процесса.

Отступ от точки старта или завершения до ближайшей точки бизнес-процесса рекомендуется делать в две клетки.

Изображение: Точки старт и завершение (480.img2.jpg)

#### 2.2.

Точки **Действие**, **Автоматическая обработка**, **Вложенный бизнес-процесс** должны иметь размер, достаточный для размещаемого текста.

Текст в этих точках должен быть короткой директивой и отвечать на вопрос «Что нужно сделать?» (например, «Выписать счет», а не «Выписка счета»).

Слева от этих точек располагайте декорации входящих данных, необходимых для выполнения действия. Справа располагайте декорации результирующих (исходящих) данных.

#### 2.3.

Изображения входящих документов располагайте слева от точки на расстоянии двух клеток и соединяйте с точкой пунктирной линией со стрелкой.

Изображения исходящих документов располагайте справа от точки на расстоянии двух клеток и соединяйте с точкой пунктирной линией со стрелкой.

Документы оформляйте фигурой вида «Документ».

Изображение: Оформление входящих и исходящих документов (480.img3.jpg)

Пропорции декорации документа по возможности приближайте к формату А4 (например, 4х5 или 3х4 клетки стандартной сетки).

#### 2.4.

Комментарии к точкам маршрута размещайте на расстоянии двух клеток:

- слева от точки, если комментарий относится к входящему документу;
- справа от точки, если комментарий относится к исходящему документу.

Комментарий оформляйте фигурой **Скобки вертикальные** или **Скобки горизонтальные** и соединяйте с гранью точки маршрута пунктирной линией без стрелки.

Изображение: Оформление комментариев (480.img4.jpg)

#### 2.5.

Точки условного перехода должны содержать короткий вопрос, заканчивающийся знаком вопроса.

Вопрос формулируйте так, чтобы ответ был только **Да** или **Нет** (например, **Счет есть?**, **Отгрузка разрешена?**, **ОК?**).

Точки условия делайте максимально компактными, но без потери наглядности: это точки перехода, а не точки действия.

Соединительные линии точек условия (входящие и исходящие) должны иметь суммарную длину не менее двух клеток, чтобы надписи **Да** и **Нет** читались нормально.

Изображение: Оформление условного перехода (480.img5.jpg)

#### Источник

https://its.1c.ru/db/v8std#content:480

Пример оформления бизнес-процесса:

Оформление карты маршрута бизнес-процесса #std480


стандарт 482

ID: #std482

# Заполнение свойств конфигурации информацией о выпуске

#### 1.

**Синоним**. В синониме указывается официальное название конфигурации, которое будет идентифицировать конфигурацию в документации, на коробке с продуктом, прайс-листе, рекламе, в информационных и методических материалах. В конце официального названия через запятую указывается слово "редакция" и номер редакции.

Например: `Бухгалтерия предприятия, редакция 1.6`

#### 2.

**Имя**. Имя образуется по правилам образования имен из синонима; слово "редакция", номер редакции (и подредакции) – не указываются.

Например: `БухгалтерияПредприятия`

#### 3.

**Краткая информация**. Краткая информация повторяет синоним.

#### 4.

**Подробная информация**. Подробная информация повторяет синоним.

#### 5.

**Логотип**. Для типовых конфигураций фирмы "1С" картинка логотипа не заполняется.

#### 6.

**Заставка**. В качестве заставки устанавливается картинка одного из типов, поддерживаемых системой 1С:Предприятие. Требования к размеру картинки см. в [документации](https://its.1c.ru/db/v83doc/bookmark/dev/TI000002041).

#### 7.

**Авторские права**. Указывается строка вида:

```
Copyright (C) <разработчик>, хххх-хххх. Все права защищены.
```

Для конфигураций на английском языке:

```
Copyright (C) <разработчик>, хххх-хххх. All rights reserved.
```

Вместо "хххх-хххх" указываются конкретные годы выпуска конфигурации.

Например:

```
Copyright (C) ООО "1С-Софт", 2009-2025. Все права защищены
```

#### 8.

**Адрес информации о поставщике**. Для типовых конфигураций фирмы "1С" указывается строка:
[https://www.1c.ru](https://www.1c.ru)

#### 9.

**Адрес информации о конфигурации**. Для типовых конфигураций фирмы "1С" указывается строка:

`https://v8.1c.ru//`,

где вместо ** указывается англоязычное короткое имя конкретной конфигурации, например:

[https://v8.1c.ru/trade/](https://v8.1c.ru/trade/)

#### 10.

**Поставщик**. Для типовых конфигураций фирмы "1С" в качестве поставщика указывается:

Фирма "1С"

#### 11.

**Версия**. Указывается полный номер версии конфигурации. Например, 1.6.4.7

Подробнее об образовании номера версии см. раздел [#std483: Нумерация редакций и версий](https://v8std.ru/std/483/)

#### 12.

**Адрес каталога обновлений**. Для типовых конфигураций фирмы "1С" указывается строка:

[https://downloads.v8.1c.ru/tmplts/](https://downloads.v8.1c.ru/tmplts/)

#### Проверки

[#acc:60](https://v8std.ru/diagnostics/acc/60/)
[#acc:61](https://v8std.ru/diagnostics/acc/61/)
[#acc:62](https://v8std.ru/diagnostics/acc/62/)
[#acc:63](https://v8std.ru/diagnostics/acc/63/)
[#acc:64](https://v8std.ru/diagnostics/acc/64/)
[#acc:72](https://v8std.ru/diagnostics/acc/72/)
[#acc:76](https://v8std.ru/diagnostics/acc/76/)
[#acc:1201](https://v8std.ru/diagnostics/acc/1201/)
[#acc:1202](https://v8std.ru/diagnostics/acc/1202/)
[#acc:1203](https://v8std.ru/diagnostics/acc/1203/)
#### Источник

https://its.1c.ru/db/v8std#content:482

Синоним. В синониме указывается официальное название конфигурации, которое будет идентифицировать конфигурацию в документации, на коробке с продуктом, прайс-листе, рекламе, в...

Краткая информация отличается от синонима. АПК:1201

Подробная информация отличается от синонима. АПК:1202

Неверно указан поставщик. Должен быть "Фирма "1С"". АПК:1203

Не заполнен синоним конфигурации. АПК:60

В имени конфигурации запрещено использовать слова "редакция" или "подредакция". АПК:61

Неверно указан адрес информации о поставщике. Должен быть "http://www.1c.ru". АПК:62

Неверно указан адрес информации о конфигурации. Должен начинаться с "http://v8.1c.ru/". АПК:63

Неверно указан адрес каталога обновлений. Должен быть "http://downloads.v8.1c.ru/tmplts/". АПК:64

Синоним должен оканчиваться на номер редакции.подредакции. АПК:72

Неверно указана информация об авторских правах. Должно начинаться с "Copyright © ООО "1С-Софт"". АПК:76

Нумерация редакций и версий #std483

Заполнение свойств конфигурации информацией о выпуске #std482


стандарт 483

ID: #std483

# Нумерация редакций и версий

#### 1.

Новая редакция получает следующий целый номер относительно предыдущей.
Формат обозначения: `Редакция.Подредакция` (например, `1.5`, `1.6`).
Для новой конфигурации стартовая редакция: `1.0`.

#### 2.

В пределах одной подредакции используйте сквозную нумерацию версий,
включая альфа, ознакомительные, бета и финальные выпуски.

Нумерация версий начинается с: `1`.

#### 3.

Полный номер версии указывается в свойстве `Версия` конфигурации
в формате:

`{Р|РР}.{П|ПП}.{З|ЗЗ}.{С|СС}`

```mermaid
%%{init: {"flowchart": {"nodeSpacing": 4, "rankSpacing": 22, "curve": "linear"}} }%%
flowchart LR
    D1["2"]:::digit --> P1["."]:::dot --> D2["3"]:::digit --> P2["."]:::dot --> D3["5"]:::digit --> P3["."]:::dot --> D4["2"]:::digit
    H1["Редакция"]:::hint --> S1[" "]:::spacer --> H2["Подредакция"]:::hint --> S2[" "]:::spacer --> H3["Версия"]:::hint --> S3[" "]:::spacer --> H4["Сборка"]:::hint

    classDef digit font-weight:400,font-size:24px,padding:0px
    classDef dot fill:transparent,stroke:transparent,font-weight:900,font-size:64px
    classDef hint fill:transparent,stroke:transparent,font-size:12px,font-weight:600
    classDef spacer fill:transparent,stroke:transparent,color:transparent

    linkStyle 0,1,2,3,4,5,6,7,8,9,10,11 stroke:transparent,stroke-width:0px,fill:transparent
```

Каждая часть содержит минимум одну цифру и при необходимости может быть длиннее.

#### Пример

`1.6.4.7` — `7`-я сборка `4`-й версии редакции `1.6`.

#### См. также

- [#std484: Общие сведения о выпуске конфигураций](https://v8std.ru/std/484/)

#### Проверки

[#acc:71](https://v8std.ru/diagnostics/acc/71/)
[#acc:1200](https://v8std.ru/diagnostics/acc/1200/)
#### Источник

https://its.1c.ru/db/v8std#content:483

Новая редакция получает следующий целый номер относительно предыдущей. Формат обозначения: Редакция.Подредакция (например, 1.5, 1.6). Для новой конфигурации стартовая редакция:...

Неверно установлен номер версии. Правильный формат "РР.ПП.ЗЗ.СС". АПК:1200

Неверно установлен номер версии. Он не должен быть вида 0.0.0.0, N.0.0.0, N.0.N.0 или N.0.0.N. АПК:71

Общие сведения о выпуске конфигураций #std484

Нумерация редакций и версий #std483


стандарт 484

ID: #std484

# Общие сведения о выпуске конфигураций

#### 1.

Конфигурации выпускаются **версиями** и **редакциями**.

#### 2.

**Версия** — выпуск с исправлением ошибок и небольшими улучшениями.

Новая версия должна обеспечивать переход с предыдущей
с сохранением данных.

#### 3.

**Редакция** — выпуск с существенными изменениями структуры учета,
которые могут требовать преобразования данных.

Формальный (но не обязательный) признак новой редакции —
необходимость переноса данных через конвертацию.

При выпуске новой редакции желательно обеспечивать переход
с сохранением данных.

Если это невозможно, опишите процедуру перехода:

- с чего начинать работу в новой редакции;
- как переносить начальные остатки;
- какие ограничения действуют при переходе.

#### См. также

- [#std483: Нумерация редакций и версий](https://v8std.ru/std/483/)

#### Источник

https://its.1c.ru/db/v8std#content:484

Конфигурации выпускаются версиями и редакциями.

Нумерация редакций и версий #std483