# 1С:Стандарты разработки V8 - CHANGELOG - ИСТОРИЯ ИЗМЕНЕНИЙ

[TOC text bullet hierarchy]

## 0.7.0


### Новые проверки


#### Метаданные

- Превышена максимальная длина числовых данных (31 знак). #82


#### Формы


#### Код модулей

- Проверка на уникальность имени поля в doc-comment-field-name #1392
- Проверка модификации ключей структуры вне функции-конструктора #1054


#### Запросы



### Прочие изменения

- Контекстная команда форматирования документирующего комментария в редакторе модуля #1418

### Исправленные ошибки

- Ложное срабатывание проверки module-accessibility-at-client в модулях расширений #1207


## 0.6.0

Выпуск бета-версии для 1C:EDT 2023.2

### Исправленные ошибки

- Автосортировщик не сортирует дочерние подсистемы после получения изменений из базы
- Исправлены тексты сообщений в проверке common-module-name-global-client

## 0.5.0

Выпуск бета-версии для 1C:EDT 2023.1

### Новые проверки


#### Метаданные

- Документ не имеет реквизита "Комментарий"
- Реквизит "Комментарий" имеет корректный тип
- В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении / отмене проведения"
- Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных
- В функциональной опции не установлен флаг "Привилегированный режим при получении"

#### Формы

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

#### Код модулей

- Проверка отсутствия кода после асинхронного вызова
- Проверка использования метода ДанныеФормыВЗначение вместо РеквизитФормыВЗначение
- В проверку использования нерекомендуемых методов (use-non-recommended-method) добавлен метод ПолучитьФорму(GetForm)
- Использование устаревшего метода Найти
- Отсутствует комментарий к экспортной процедуре (функции)
- Документирующий комментарий не содержит секцию "Описание" для экспортной процедуры (функции)
- В проверку "module-self-reference" добавлен параметр, позволяющий пропускать проверку для модулей объектов, наборов записей и менеджеров значений
- Проверка корректного наименования переменных
- Обращение к несуществующему параметру формы
- Необязательный параметр процедуры/функции стоит перед обязательным
- Обращение к опциональному параметру формы
- Функция "РольДоступна" ссылается на несуществующие роли
- Проверка на использование оператора Перейти (Goto) в коде модулей

#### Запросы

- Доработана проверка ql-temp-table-index: параметр MAX_TOP (Макс. кол-во строк в выборке) теперь настраиваемый.


### Прочие изменения


#### Автосортировка

- В свойствах проекта секция "Авто сортировка" теперь располагается по пути "V8 -> Сортировка объектов метаданных -> Авто сортировка"
- В свойствах проекта в секции "Авто сортировка" более недоступна настройка направления и порядка сортировки. Настройка направления и порядка сортировки доступна в секции "Сортировка объектов метаданных"
- В свойствах проекта в секции "Авто сортировка" добавлена возможность переноса заданных пользователем настроек направления и порядка сортировки в секцию "Сортировка объектов метаданных" и их очистки
- Добавлена консольная команда сортировки проекта

### Исправленные ошибки

- Требование к программному продукту: Для переменных общих модулей проверялся префикс расширения и диагностировалась ошибка
- При анализе расположения устаревших методов учитывался только сценарий расположения устаревшей области в программном интерфейса, теперь учитывается еще и служебный программный интерфейс
- Исправлена ошибка в сообщении проверки method-optional-parameter-before-required #1351
- Некорректная работа: md-object-attribute-comment-not-exist #1334

## 0.4.0

- Выпуск бета-версии для 1C:EDT 2022.2

### Новые проверки


#### Метаданные

- Превышена максимальная длина ресурса регистра накопления или бухгалтерии (25 знаков)
- Для глобальных модулей не следует добавлять постфикс «Клиент» 
- Проверка наличия префикса расширения в имени объекта расширения.
- Общий модуль, для которого установлен признак привилегированный, должен именоваться с постфиксом "ПолныеПрава"

#### Формы

- Один обработчик выполнения назначен нескольким элементам

#### Код модулей

- Добавление типизированного значения в не типизированную коллекцию
- Общий модуль должен иметь программный интерфейс
- Кэширование программного интерфейса
- Проверка максимального количества допустимых пустых строк
- Чтение отдельных реквизитов объекта из базы данных
- Использование экспортных переменных в модулях объекта
- Использование конструкции "Новый Шрифт"
- Проверка наличия префикса расширения в имени переменной расширения
- Проверка наличия префикса расширения в методе расширения.
- Устаревшая процедура (функция) расположена вне области "УстаревшиеПроцедурыИФункции"
- Использован обработчик событий, подключаемый из кода и не содержащий префикса "Подключаемый_"

### Новые быстрые исправления (Quick-fix)

- Исправление превышения максимального количества допустимых пустых строк 

#### Автосортировка

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

### Исправленные ошибки

- Стандарт 492: Добавить исключение в module-unused-method для процедур подключаемых из кода с префиксом "Подключаемый_" #1141
- Стандарт 644: Исправлена ситуация при которой для вложенных областей в устаревшую область диагностировалась ошибка

## 0.3.0

- Выпуск бета-версии для 1C:EDT 2022.1


### Новые проверки


#### Метаданные

- Длина синонима раздела верхнего уровня, отображаемого в интерфейсе, не должна превышать 35 символов
- Реквизиты составного типа, содержащие ссылочные типы и нессылочные типы вместе
- Реквизиты составного типа, содержащие типы `ЛюбаяСсылка`, `СправочникСсылка`, `ДокументСсылка` и аналогичные
- Небезопасное хранение паролей в информационной базе

#### Формы

- У реквизита "Ссылка" динамического списка выключен признак "Использовать всегда"
- У поля "Ссылка" таблицы динамического списка не отключена пользовательская видимость
- У каждого события должна быть назначена своя процедура-обработчик
- Проверка заполнения заголовка поля динамического списка
- Реквизит "Ссылка" динамического списка не выведен в таблицу на форме
- Добавлено имя элемента формы в сообщение проверки form-list-ref-user-visibility-enabled

#### Код модулей

- 3 проверки на избыточное обращение внутри модуля через его имя или псевдоним ЭтотОбъект (к методу, свойству или реквизиту)
- Проверка использования устаревшего "ЭтаФорма" в модуле формы
- Избыточное ключевое слово Экспорт
- Проверка нарушения схемы работы с транзакциями связанной с фиксацией транзакции:
    1. Вызов "ЗафиксироватьТранзакцию()" находится вне конструкции "Попытка... Исключение"
    2. Отсутствует вызов "НачатьТранзакцию()", хотя вызываются "ЗафиксироватьТранзакцию()"
    3. Для вызова "НачатьТранзакцию()" отсутствует парный вызов "ОтменитьТранзакцию()"
    4. Mежду "ЗафиксироватьТранзакцию()" и "Исключение" есть исполняемый код, который может вызвать исключение
- Проверка нарушения схемы работы с транзакциями связанной с отменой транзакции:  
    1. Вызов "ОтменитьТранзакцию()" находится вне конструкции "Попытка... Исключение"
    2. Отсутствует вызов "НачатьТранзакцию()", хотя вызываются "ОтменитьТранзакцию()"
    3. Для вызова "НачатьТранзакцию()" отсутствует парный вызов "ЗафиксироватьТранзакцию()"
    4. Mежду "Исключение" и "ОтменитьТранзакцию()" есть исполняемый код, который может вызвать исключение
- Проверка нарушения схемы работы с транзакциями связанной с началом транзакции:
    1. Mежду "НачатьТранзакцию()" и "Попытка" есть исполняемый код, который может вызвать исключение
    2. Не найден оператор "Попытка" после вызова "НачатьТранзакцию()"
- Отсутствует удаление временного файла после использования.
- Структура модуля. Проверка областей событий формы.
- Структура модуля. Добавлена проверка области событий.
- Отсутствует включение безопасного режима перед вызовом метода "Выполнить" или "Вычислить"
- Структура модуля. Добавлена проверка метода вне области.
- Структура модуля. Добавлена проверка соответсвия состава областей верхнего модуля стандарту, их порядка и наличия дублей.
- Структура модуля. Проверка что код инициализации расположен в области инициализации.
- Структура модуля. Область объявления переменных.
- Из проверка doc-comment-parameter-section выделена проверка doc-comment-redundant-parameter-section

#### Запросы

- В качестве правого операнда операции сравнения "ПОДОБНО" указано поле таблицы
- В запросе в бинарной операции используются константные значения

#### Права ролей

- Установлено право "Удаление"

### Новые быстрые исправления (Quick-fix)

- 3 исправления исправления для удаления избыточного обращения внутри модуля к самому себе
- Замена в модуле формы устаревшего свойства "ЭтаФорма" на "ЭтотОбъект"
- Конвертация функции в процедуру
- Генерация заголовка элемента формы динамического списка
- Генерация заголовка поля динамического списка (8.3.19 и выше)
- Добавление включения безопасного режима перед вызовом метода "Выполнить" или "Вычислить"


### Исправленные ошибки

- Неправильно валидируется пустой метод с комментарием #1007
- Понижение критичности для ошибок с кодами "doc-comment-use-minus", "form-module-missing-pragma" #1014 
- Ошибка проверки md-standard-attribute-synonym-empty на проекте расширения #1021
- NPE при проверке в FunctionCtorReturnSectionCheck #1029
- NullPointerException, если проект EDT - расширение без указания основного языка. #1033
- Исключить BaseForm из проверок для форм #1037
- Ложное срабатывание проверки: common-module-type (признак привилегированный) #1031 
- Ложное срабатывание проверки: invocation-parameter-type-intersect для Списка значений #997
- Ложное срабатывание проверки: invocation-parameter-type-intersect - для методов с несколькими вариантами вызова #992 #1039 #1056
- Ложное срабатывание проверки: doc-comment-ref-link Учет точки в конце ссылки на метод #993
- Ложное срабатывание проверки: statement-type-change для типов общего модуля #994
- Некорректное сообщение об ошибке в строгих типах. Не существует типа "Таблица" #1055
- Ложное сообщение об ошибке о неиспользовании составных типов для стандартных объектов метаданных #1069
- Ложное срабатывание проверки для динамических списков с произвольным запросом: У реквизита "Ссылка" динамического списка выключен признак "Использовать всегда" #1071
- Проверка: right-... не находит ошибку для роли с включением по умолчанию #815
- Отключение проверок для заимствованных объектов в расширении #1076
- Проверка: form-self-reference не находит ошибку #1086
- Ложное срабатывание проверки: module-structure-event-regions для обработчиков событий расположенных в общем модуле #1102
- Автосортировка падает при переводе кода #1106 
- Ложное срабатывание проверки: new-color при сбрасывании цвета в значение Авто можно использовать Новый Цвет #1123
- Ложное срабатывание проверки: ql-constants-in-binary-operation #1142
- Не понятно в какой бинарной операции ошибка ql-constants-in-binary-operation #1143
- Возникает NPE при работе проверки form-list-ref-user-visibility-enabled #1146
- Проверка: doc-comment-parameter-section не находит ошибку #1087
- Исправление пересечения родительских типов ОМД #1138
- Ложное срабатывание проверки module-structure-init-code-in-region #1155
- Ложное срабатывание проверки: module-self-reference #1162

## 0.2.0

- Выпуск бета-версии для 1C:EDT 2021.3
- Автоматические индексы описаний проверок в справке `Help -> Help contents -> 1C:Code style V8`

### Новые фичи

- Функциональные опции, добавляемые 1C:Code Style, собраны в одном месте для удобного включения/выключения - в помощнике создания нового проекта или в свойствах проекта.
- В автосортировке метаданных добавлен учет системы запрета редактирования объектов (правила поддержки)
- Контекстное включение строгой типизации в модулях: по проекту, по списку объектов 1С или по списку файлов/каталогов, из контекстного меню в редакторе модуля

### Новые проверки

#### Метаданные

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

#### Код модулей

- Использован метод "РольДоступна()"
- Программный вызов обработчика события формы
- Изменение категории проверки use-non-recommended-method на "стандарты разработки"
- Использование конструкции "Новый Цвет"
- Перенесены проверки документирующего комментария:
   1. Тип коллекций в документирующем комментарии содержит тип элемента коллекции
   2. Поле документирующего комментария использует объявление сложного типа вместо ссылки на тип
   3. Многострочное описание документирующего комментария оканчивается на точку
   4. Серкция возвращаемого значения документирующего комментария для экспортной функции
   5. Многострочное описание документирующего комментария содержит определение поля
   6. Поле документирующего комментария является корректным именем
   7. Поле документирующего комментария не имеет определения типа
   8. Многострочное описание документирующего комментария содержит определение параметра
   9. В секции параметров документирующего комментария пропущено определение параметра
   10. Документирующий комментарий содежрит секцию возвращаемого значения для процедуры
   11. Ссылка документирующего комментария на существующий объект
   12. Секция возвращаемого значения документирующего комментария содержит корректные типы
   13. Определение типа документирующего комментария
   14. Активирована ранее отключенная проверка: Секция возвращаемого значения функции-конструктора данных
- Исправлен идентификатор проверки тип в строгой типизации: `doc-comment-field-type` -> `doc-comment-field-type-strict`
- Ограничения на использование экспортных процедур и функций в модулях команд и форм
- Вызов "Заблокировать()" находится вне попытки
- Для проверок dynamic-access-method-not-found и property-return-type добавлена возможность исключения по типам (COM-Объекты)
- Проверка типов invocation-parameter-type-intersect проверяет типы элементов коллекций: Массив, Соотвествие, СписокЗначений

### Новые быстрые исправления (Quick-fix)

- Удаление аннотации строгой типизации из модуля
- Открытие панели документирующего комментария
- Удаление ключевого слова Экспорт для процедур или функций в модуле команды и в модуле формы

### Исправленные ошибки

- Падение NPE в проверке ql-using-for-update, корректный учет зависимых проектов (обработки, расширения)
- Клиентский глобальный модуль: ошибочное предупреждение о некорректном типе
- Отключено создание модуля менеджера при создании перечисления
- Для проверки md-standard-attribute-synonym-empty исправлена регистрация и улучшена точность позиции ошибки
- Исправлен расчета типов возвращаемых значений функций с вызовом сервера
- Испрвление проверки типа локальной переменной в variable-value-type
- Проверка типов invocation-parameter-type-intersect при вызове метода, если существуют документирующие комментарии использует только декларированные типы

## 0.1.0

Выпуск бета-версии для 1C:EDT 2021.2

### Новые фичи

- Автосортировка метаданных, сортировка объектов верхнего уровня по умолчанию, для подчиненных настраивается
- Выбор подходящего тип общего модуля из списка при создании нового
- Панель "Bsl Документирующий комментарий"
- Автоматическое создание структуры модуля
- Автоматическое включение строгой типизации модулей

### Новые проверки

#### Метаданные

- Длина имени объекта метаданного должна быть меньше чем 80
- Приложение должно использовать управляемый режим блокировки данных
- Общий модуль имеет некорректный тип
- Глобальный общий модуль должен оканчиваться на суффикс Глобальный
- Клиент-серверный общий модуль должен оканчиваться на суффикс КлиентСервер
- Клиентский общий модуль должен оканчиваться на суффикс Клиент
- Не заполнено ни представление объекта, ни представление списка
- У предопределенного регламентного задания не должно быть заполнено наименование
- У стандартного свойства 'Владелец' или 'Родитель' должен быть заполнен синоним

#### Формы

- В полях форм со списками выбора следует всегда устанавливать свойство **РежимВыбораИзСписка** в значение Истина.
- Путь к данным объекта формы ссылается на существующий объект в каждом сегменте пути

#### Код модулей

- Проверка конструктора структуры содержащего больше 3х ключей
- Выполнение запроса в цикле с учетом локальных вызовов в модуле
- Проверка ОбменДанными.Загрузка в обработчике события
- Система строгой типизации кода:
    - Переменная имеет тип значения
    - Параметр метода имеет тип
    - Функция возвращает типизированное значение
    - Утверждение меняет тип
    - Типизация значений в конструкторе структуры
    - Вызываемый тип пересекается с типом параметра
    - Секция возвращаемого значения функции-конструктора данных
    - Свойство объекта имеет тип возвращаемого значения
    - Метод в объекте не найден
    - Поле документирующего комментария имеет описание типа
- Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении
- Аннотация для метода написана канонически
- Используется аннотация &ИзменениеИКонтроль вместо &Вместо
- НСтр формат строкового литерала
- Использование булевного параметра обработчика события
- Метод содержит слишком много параметров
- Использование только дефис-минуса в документирующем комментарии
- Использование не рекомендуемых методов:
    - ТекущаяДата
    - Сообщить
- Область пустая
- Стандартная область структуры модуля верхнеуровневая
- Использование директив компиляции модуля формы
- Всегда использовать директивы компиляции в модуле формы
- Описание оповещения на серверную процедуру
- Метод или переменная доступны НаКлиенте

#### Запросы

- Временная таблица должна содержать индексы
- Ограничение максимальной длины числа в запросе
- Строковый литерал должен содержать CamelCase
- Соединение с подзапросом
- Использование конструкции "ДЛЯ ИЗМЕНЕНИЯ"
- Отбор виртуальной таблицы должен быть в параметрах

#### Права ролей

- Право роли содержит текст ограничения доступа (RLS)
- Установлено право "ИнтерактивноеУдаление"
- Установлено право "ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных"
- Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных"
- Установлено право "ИнтерактивноеПометкаУдаленияПредопределенныхДанных"
- Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных"
- Право "Активные пользователи" на корень конфигурации установлено только у стандартной роли
- Право "Администрирование" на корень конфигурации установлено только у стандартной роли
- Право "Режим "Все функции"" на корень конфигурации установлено только у стандартной роли
- Право "Администрирование расширений конфигурации" на корень конфигурации установлено только у стандартной роли
- Право "Администрирование данных" на корень конфигурации установлено только у стандартной роли
- Право "Интерактивное открытие внешних обработок" на корень конфигурации установлено только у стандартной роли
- Право "Интерактивное открытие внешних отчетов" на корень конфигурации установлено только у стандартной роли
- Право "Вывод" на корень конфигурации установлено только у стандартной роли
- Право "Сохранение данных пользователя" на корень конфигурации установлено только у стандартной роли
- Право "Automation" на корень конфигурации установлено только у стандартной роли
- Право "Внешнее соединение" на корень конфигурации установлено только у стандартной роли
- Право "Толстый клиент" на корень конфигурации установлено только у стандартной роли
- Право "Тонкий клиент" на корень конфигурации установлено только у стандартной роли
- Право "Веб-клиент" на корень конфигурации установлено только у стандартной роли
- Право "Обновление конфигурации базы данных" на корень конфигурации установлено только у стандартной роли
- Право "Журнал регистрации" на корень конфигурации установлено только у стандартной роли
