1
0
mirror of https://github.com/1C-Company/v8-code-style.git synced 2025-07-17 13:07:50 +02:00

исправил ошибки (#805)

This commit is contained in:
DitriXEDT
2021-09-27 18:25:13 +03:00
committed by GitHub
parent c920a85161
commit ffe715660a

View File

@ -24,7 +24,7 @@
Для этого необходимо в заголовке модуля указать аннотацию до первого семантического объекта (области, процедуры, переменной):
```bsl
// @strict-types
//@strict-types
#Область ПрограммныйИнтерфейс
...
@ -34,7 +34,7 @@
#### Применение строгой типизации
* Для всех новых конфигураций, не имеющих большого наследия нетипизированного кода, для всех модулей следует включать строгую типизацию.
* Для всех новых конфигураций, не имеющих большого наследия не типизированного кода, для всех модулей следует включать строгую типизацию.
* Для существующих модулей рекомендуется сначала выполнить адаптацию кода и после включить строгую типизацию.
@ -183,7 +183,7 @@
## Сокращение типа локальной переменной или параметра
- Можно безопасно сократить (или фактически установить для статического анализатора) тип локальной переменной метода, входящего параметра или перменной модуля (объекта, формы) метода через проверку типа:
- Можно безопасно сократить (или фактически установить для статического анализатора) тип локальной переменной метода, входящего параметра или переменной модуля (объекта, формы) метода через проверку типа:
```bsl
Если ТипЗнч(МояПеременная) = Тип("СправочникОбъект.Товары") Тогда
@ -195,7 +195,7 @@
## Инициализация ключей структуры
- Значения ключей структуры (как в конструкторе, так и при добавлении в структуру) должны быть инициализированы сразу с пустым значением того типа, который будет использоваться в последствии. Динамическая типизация не позволяет рассчитать смену типа свойства структуры и, если не указывать пустое значение нужного типа, свойство будет инициализировано с типом Неопределенно.
- Значения ключей структуры (как в конструкторе, так и при добавлении в структуру) должны быть инициализированы сразу с пустым значением того типа, который будет использоваться в последствии. Динамическая типизация не позволяет рассчитать смену типа свойства структуры и, если не указывать пустое значение нужного типа, свойство будет инициализировано с типом Неопределенно.
- Смена типа значения ключа структуры - не допускается.
НЕПРАВИЛЬНО:
@ -347,7 +347,7 @@
- Не рекомендуется использовать в качестве значений объекты разных типов: строки с числами, простые типы со ссылочными, объекты БД и структуры и т.д.
- Если значение массива сложное, рекомендуется использовать функцию-конструктор для инициализации пустого массива или массива с данными
- Если в функции создается массив и наполняется значениями, допустимо описывать возвращаемое значение типов элементов массива в описании функции, если в самой функции не происходит обращения к элементам массива.
- Если в функции создается массив и наполняется значениями, допустимо описывать возвращаемое значение типов элементов массива в описании функции, если в самой функции не происходит обращения к элементам массива.
- В документирующих комментариях следует указывать тип элементов массива для параметров и возвращаемых значений.
## Описание таблицы значений, дерева значений
@ -395,7 +395,7 @@
....
```
- Исключением могут быть методы обрабатывающие произвольные таблицы, место создания которых неизвестно, но код метода рассчитывает на наличие определенных колонок. Все колонки, на которые расчитывает код, с их типами должны быть указаны в документирующем описании.
- Исключением могут быть методы обрабатывающие произвольные таблицы, место создания которых неизвестно, но код метода рассчитывает на наличие определенных колонок. Все колонки, на которые рассчитывает код, с их типами должны быть указаны в документирующем описании.
НЕПРАВИЛЬНО:
@ -526,7 +526,7 @@
## Ссылка на Форму
Ссылка на форму казывается по полному имени формы
Ссылка на форму указывается по полному имени формы
ПРАВИЛЬНО:
@ -585,7 +585,7 @@
Процедура ОбработкаОбъекта(СтрокаТЗ)
```
## Ссылка на тип парамета метода в модел менджера, объекта, общем модуле
## Ссылка на тип параметра метода в модели менджера, объекта, общем модуле
Ссылка на тип параметра экспортного метода из модуля менеджера
@ -609,7 +609,7 @@
## Наследование типов параметров по сигнатуре метода
При размещении процедур в общих модулях (обычно "Переопределяемый") из общих процедуры могут быть вызваны наследники какого либо механизма библиотеки.
При размещении процедур в общих модулях (обычно "Переопределяемый") из общих процедуры могут быть вызваны наследники какого-либо механизма библиотеки.
ПРАВИЛЬНО:
@ -624,7 +624,7 @@
...
```
В модуле менеджера соотвествующих объектов можно сослаться на сигнатуру параметров метода, чтобы не описывать полностью все типы.
В модуле менеджера соответствующих объектов можно сослаться на сигнатуру параметров метода, чтобы не описывать полностью все типы.
Необходимо указать только ссылку на метод, других комментариев или элементов документирующих комментариев быть не должно.
ПРАВИЛЬНО:
@ -657,7 +657,7 @@
### Указание ссылки на функцию-конструктор данных
При описании параметра метода следует указывать ссылку на функцию-констроктор данных без указания исходного базового типа данных (структура, таблица значений и т.д.).
При описании параметра метода следует указывать ссылку на функцию-конструктор данных без указания исходного базового типа данных (структура, таблица значений и т.д.).
НЕПРАВИЛЬНО 1:
@ -786,11 +786,11 @@
## Описание программных интерфейсов для реализации в прикладных объектах
Существует понятие "описания программного интерфейса объекта" и его реализация в прикладных объектах конфигурации. С применением библиотечного подхода к разработке конфигураций, библиотека может описывать некий программный интерфейс который должен быть реализован в прикладном объекте, для того чтобы библиотечный механизм имел достук к объкту.
Существует понятие "описания программного интерфейса объекта" и его реализация в прикладных объектах конфигурации. С применением библиотечного подхода к разработке конфигураций, библиотека может описывать некий программный интерфейс который должен быть реализован в прикладном объекте, для того чтобы библиотечный механизм имел доступ к объекту.
Например, механизм "Свойства" из библиотеки БСП описывает интерфейс объекта: Наличие табличной части `ДополнительныеРеквизиты`, содержит колонки `Свойство`, `Значение`, `ТекстоваяСтрока` с определенными типами. Далее общий механизм библиотеки может обращаться к объекту например, при записи `УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);` объекта из формы.
Следует описывать интерфейс входящего объекта для той части объекта, которая требуется для работы механизма. При этом, следует учитывать что механизм расширений свойств в документирующих коментариях поддерживается для тех типов, у которых возможны пользовательские совойства. Например: элементы коллекции вместо самих коллекций - тип `ТабличнаяЧасть` не имеет пользовательских свойств, а тип `СтрокаТабличнойЧасти` может иметь; тип `ДанныеФормыКоллекция` не имеет пользовательских свойств, а тип `ДанныеФормыЭлементКоллекции` может иметь.
Следует описывать интерфейс входящего объекта для той части объекта, которая требуется для работы механизма. При этом, следует учитывать, что механизм расширений свойств в документирующих коментариях поддерживается для тех типов, у которых возможны пользовательские совойства. Например: элементы коллекции вместо самих коллекций - тип `ТабличнаяЧасть` не имеет пользовательских свойств, а тип `СтрокаТабличнойЧасти` может иметь; тип `ДанныеФормыКоллекция` не имеет пользовательских свойств, а тип `ДанныеФормыЭлементКоллекции` может иметь.
НЕПРАВИЛЬНО:
@ -880,7 +880,7 @@
....
```
- Для функций общих модулей, расчитывающих на дополнительные свойства и методы расширения типа `ФормаКлиентскогоПриложения` следует использовать соответствующие типы расширений управляемой формы: `РасширениеУправляемойФормыДляОбъектов`, `РасширениеУправляемойФормыДляДокумента`, `РасширениеУправляемойФормыДляДинамическогоСписка` и так далее.
- Для функций общих модулей, рассчитывающих на дополнительные свойства и методы расширения типа `ФормаКлиентскогоПриложения` следует использовать соответствующие типы расширений управляемой формы: `РасширениеУправляемойФормыДляОбъектов`, `РасширениеУправляемойФормыДляДокумента`, `РасширениеУправляемойФормыДляДинамическогоСписка` и так далее.
```bsl
// Параметры:
@ -909,6 +909,7 @@
```bsl
Форма = ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента");
// или
Форма = Справочники.Номенклатура.ПолучитьФорму("ФормаЭлемента");
```
@ -930,7 +931,7 @@
Данные = ПолучитьИзВременногоХранилища(Адрес); // см. НовыйОбъектДанных
```
- Аналогичный подход следует использовать при помещении пользовательского объекта внутрь другого объекта-контейнера, например `ДполнительныеПараметры` у объектов, или `Параметры` формы, пользовательские параметры элементов `СКД`, `ДополнительныеПараметры` у обработчиков оповещения и так далее.
- Аналогичный подход следует использовать при помещении пользовательского объекта внутрь другого объекта-контейнера, например ополнительныеПараметры` у объектов, или `Параметры` формы, пользовательские параметры элементов `СКД`, `ДополнительныеПараметры` у обработчиков оповещения и так далее.
## Использование строковых литералов в качестве имен
@ -991,11 +992,11 @@
Реквизит формы с типом `Произвольный` в коде следует рассматривать как "черный ящик". Статический анализатор не отслеживает изменение типа реквизита формы, поэтому весь обслуживающий этот реквизит код должен использовать проверку типа значения.
В общем случае не следует использовать реквизит с типом `Произвольный` на форме, т.к. при этом разработчик самостоятельно несет ответственность за инициализацию значения в этом реквизите, за то, что все типы данных хранимые в реквизите могут быть сериализованы/десериализованы при передаче с клиента на сервер и обратно. Так же значение реквизита будет передаваться между клиентом и сервером всегда т.к. Платформа не контролирует модификацию значений например внутри структуры помещенной в произвольный реквизит.
В общем случае не следует использовать реквизит с типом `Произвольный` на форме, т.к. при этом разработчик самостоятельно несет ответственность за инициализацию значения в этом реквизите, за то, что все типы данных хранимые в реквизите могут быть сериализованы/десериализованы при передаче с клиента на сервер и обратно. Так же значение реквизита будет передаваться между клиентом и сервером всегда т.к. Платформа не контролирует модификацию значений, например внутри структуры, помещенной в произвольный реквизит.
Реквизит с типом `Произвольный` следует заменять на честные реквизиты формы с определенными типами. Исключением может быть хранимые данные общих механизмов библиотек, которые через программный интерфейс инициализируют и обрабатывают хранимое в этом реквизите значение.
Если заменить реквизит с типом `Произвольный` нет возможности, следует использовать функцию-конструктор для ициализаци значения и дальнейших ссылок на типы. При этом не следует напрямую обращаться к реквизиту - для получения значения следует использовать функцию-получатель.
Если заменить реквизит с типом `Произвольный` нет возможности, следует использовать функцию-конструктор для инициализации значения и дальнейших ссылок на типы. При этом не следует напрямую обращаться к реквизиту - для получения значения следует использовать функцию-получатель.
ПРАВИЛЬНО:
@ -1035,7 +1036,7 @@
При типизации выборки/выгрузки из результата запроса следует использовать возможности:
1. Статическое описание всех полей выборки (полей таблицы значений выгрузки) в возвращаемом значении [функции-получателе данных](#функции-получатели-сложных-объектов-данных). Может применяться для функций, динамически формирующих текст запроса и выборку, а так же все экспортные функции, возвращающие выборку.
2. Динамическая типизация полей выборк на основе текста запроса. В будущих версиях 1C:EDT может быть реализована возможность обращаться к полям запроса, при условии что текст запроса и выборка (результат запроса) находятся в одной процедуре, текст запроса не содержит ошибок (открыавется "Конструктором запросов"), выборка/выгрузка из результата запроса не передается в другой модуль для обработки.
2. Динамическая типизация полей выборки на основе текста запроса. В будущих версиях 1C:EDT может быть реализована возможность обращаться к полям запроса, при условии что текст запроса и выборка (результат запроса) находятся в одной процедуре, текст запроса не содержит ошибок (открывается "Конструктором запросов"), выборка/выгрузка из результата запроса не передается в другой модуль для обработки.
НЕПРАВИЛЬНО: