Справочник находок¶
Что значит правило находки (rule) в сводке (summary.md, summary.json, JUnit, Problems, SARIF), почему это ошибка или
предупреждение и что с ней делать. Ссылка на раздел есть у каждой находки в summary.md.
Уровни. Ошибка — «не отправлять» (код выхода 1). Предупреждение — посмотреть: код компилируется, но, вероятно, не делает того, что задумано. Одна ошибка одного места от нескольких проверок — одна находка, все проверки — в «найдено: …» (первая — основная).
Как отключить. Построчного подавления нет: находка либо исправляется, либо её проверка выключается целиком
([checks] <проверка> = "off" в otk.toml, список — otk doctor). Замечания BSL LS настраиваются его
конфигурацией .bsl-language-server.json, дымовой тест форм — [smoke] exclude, принятые ошибки проверки всех
модулей — базовой линией (otk designer-check --update-baseline).
Правила: статика — metadata-ref, common-method, form-name,
manager-method, platform-api, handler, dependent,
bslls, bsla; пробы в копии ИБ (<вид>/<исход>) — probe, query, session,
extcheck, load, scenario, smoke; проверка всех модулей —
designer; разделы «не проверено» — not-checked и «не покрыто этим прогоном» —
uncovered.
Статика (без базы)¶
Изменённые строки сверяются с индексом метаданных всей выгрузки (у расширения — и основной конфигурации,
parent). Отключение — [checks] metadata = "off" (все, кроме platform-api и analyzers).
metadata-ref¶
Обращение к объекту метаданных, которого нет: объект менеджера, значение перечисления, предопределённый элемент,
путь в строке (ПредопределенноеЗначение, ПолучитьФорму).
Ссылка = Справочники.Контрагентв.ПустаяСсылка(); // Объект не найден: Справочники.Контрагентв (возможно: Контрагенты)
Вид = Перечисления.ВидыОплат.Наличныее; // Нет значения перечисления
Ошибка: в базе такой строкой упадёт выполнение (Конфигуратор её часто не ловит — имя менеджера разрешается при
исполнении). Исправить имя (подсказка «возможно: …» — ближайшие имена). У расширения без parent — предупреждение:
объект может быть в основной конфигурации.
common-method¶
Вызов общего модуля: нет экспортного метода или неверное число параметров.
ОбщегоНазначения.ЗначениеРеквизитаОбьекта(Ссылка, "Код"); // Нет экспортного метода
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка); // Недостаточно параметров: требует 2, передано 1
Ошибка: лишние или недостающие параметры компилируются, но строка при исполнении всегда падает «Слишком много / Недостаточно фактических параметров». Исправить вызов или сигнатуру (сделать метод экспортным).
form-name¶
Имя формы в строке (ПолучитьФорму, ОткрытьФорму): нет объекта или формы у него.
ОткрытьФорму("Документ.Заказ.Форма.ФормаДокументта"); // Нет формы
Ошибка: форма не откроется при исполнении. Исправить имя формы.
manager-method¶
Вызов метода менеджера, которого нет в модуле менеджера и не похожего на стандартный (Создать…, Найти…,
Выбрать, Остатки…).
Справочники.Номенклатура.ЗаполнитьЦенуу(Объект); // Возможно ошибочный метод менеджера
Предупреждение: стандартных методов менеджеров много, совпадение по началу имени — эвристика. Проверить имя метода
или сделать его экспортным в модуле менеджера. Начала имён стандартных методов —
словарь имён платформы, ключ managerMethods; стандартные формы
(form-name) — ключ forms.
platform-api¶
Методы и типы платформы по справке синтакс-помощника платформы проверки: неизвестный метод или свойство глобального
контекста, Новый неизвестного типа или без конструктора, метод недоступен в контексте исполнения строки
(клиент, сервер, внешнее соединение, веб-клиент) или появился в версии новее режима совместимости.
&НаКлиенте
Процедура А()
НайтиПомеченныеНаУдаление(); // Метод НайтиПомеченныеНаУдаление недоступен: тонкий клиент … (доступен: сервер …)
Х = Новый ТаблицаЗначенийй; // Тип не определен: Новый ТаблицаЗначенийй
ОбщегоНазначенияКлиентСерверр.Сообщить("…"); // Переменная не определена: ОбщегоНазначенияКлиентСерверр
КонецПроцедуры
«Переменная не определена» — имя перед точкой не переменная модуля и не параметр метода, не общий модуль,
не менеджер (Справочники), не экспортная переменная модуля приложения или внешнего соединения и не имя
справки (глобальное свойство, системное перечисление). Так Конфигуратор сообщает о несуществующем или
переименованном общем модуле. Имя, которое платформа принимает, а справка не знает, — в
словарь имён платформы ([platformNames] globals); так же
ложное «Метод не найден» и «Тип не определен» — ключи methods и constructors.
Ошибка. Предупреждение — если метод, свойство или тип недоступны только в веб-клиенте при environment.webClient = false
(тип без замера веб-клиента своей линейки — и при true) или элемент новее
режима совместимости, который Конфигуратор всё же определит (та же линейка платформы, конструкторы типов): модуль не
скомпилируется только на платформе ниже указанной. Перенести код в нужный контекст (&НаСервере, #Если),
поправить имя или режим совместимости. Тип в контексте строки: Новый ЧтениеТекста в клиентском коде —
«Тип ЧтениеТекста недоступен: веб-клиент». Веб-клиент для типов Конфигуратор не проверяет, поэтому он измерен в
настоящем веб-клиенте (8.3.27, 8.5.1, 8.5.4): клиентский модуль с таким Новый в веб-клиенте не открывается вовсе
(«непредвиденная ошибка»). Справка ошибается в обе стороны: ПараметрВыбора, HTTPСоединение, ДиалогВыбораЦвета в
веб-клиенте есть, COMОбъект — нет. Справка
недоступна — «не проверено» platform-api; отключение — [checks] platform-api = "off".
Предупреждения «новее режима совместимости» своей линейки — не ошибки (Конфигуратор код принимает): минимальная
платформа проекта environment.minPlatform = "8.3.24" (--min-platform) оставляет только элементы новее неё,
environment.compatWarnings = false (--no-compat-warnings) выключает их совсем. Сколько скрыто — в примечаниях
сводки. Ошибку о методе более новой линейки (8.5 при режиме 8.3.x) ключи не трогают.
handler¶
Обработчик, указанный в Form.xml (события формы, элементов, команд), не найден в модуле формы.
Ошибка: форма не откроется («Не найден обработчик»). Добавить процедуру или убрать ссылку на неё в форме.
dependent¶
Зависимый модуль: правка удалила экспортный метод общего модуля (или весь модуль) или изменила его сигнатуру, а неизменённый модуль его вызывает.
РаботаСФайлами.ПрисоединитьФайл(Ссылка); // Вызов удалённого экспортного метода РаботаСФайлами.ПрисоединитьФайл
Ошибка: сломан код, которого правка не касалась. Вернуть метод или поправить вызовы; такой модуль проверяется и пробами наравне с изменёнными.
bslls¶
bslls:<Диагностика> — новое относительно базы замечание BSL Language Server в изменённом модуле (сравнение
«было/стало» по правке). Без .bsl-language-server.json в проекте — встроенный набор критических диагностик
(ошибки, а не стиль: транзакции, недостижимый код, функция без возврата, разбор запросов, неверная сигнатура
обработчика …); описание каждой — в документации BSL LS по её имени.
Ошибка — bslls:ParseError, bslls:ProcedureReturnsValue, bslls:UnknownPreprocessorSymbol (платформа молча
выкидывает такой блок), bslls:ThisObjectAssign; остальные — предупреждения. Поправить список — раздел
[analyzerSeverity]. Если пробы платформы проверили тот же
модуль или запрос, дубль BSL LS становится источником находки платформы, а ошибка разбора запроса, который
платформа разобрала без ошибок, отбрасывается (число — в примечаниях). BSL LS видит только изменённые модули и
их метаданные, поэтому QueryToMissingMetadata (таблицы запроса нет в метаданных) и MissingCommonModuleMethod
(у заимствованного в расширение общего модуля нет метода основной конфигурации) остаются, только если объекта или
экспортного метода нет и в индексе всей выгрузки с основной конфигурацией. Отключение — [checks] analyzers = "off" или
своей конфигурацией BSL LS.
bsla¶
bsla:<Правило> — новое относительно базы замечание bsl-analyzer (environment.analyzer = "bsl-analyzer" или
"both"). Анализатор видит модель всей конфигурации (у расширения — и основной), поэтому кроме общих с BSL LS
правил сообщает: UnresolvedMethodCall, UnresolvedBareCall — вызов несуществующего метода; MismatchedArgCount —
неверное число аргументов; UnresolvedField — неизвестное поле; UnknownFieldInQuery — нет поля в таблице
запроса; QueryToMissingMetadata — нет таблицы запроса в метаданных; UnavailableInEnvironment — метод недоступен в контексте исполнения (серверный на клиенте);
TypeMismatch — несоответствие типов; PlatformMemberNewerThanMinVersion — новее environment.minPlatform;
PlatformMemberHiddenByCompatibilityMode — скрыт режимом совместимости (выключается
environment.compatWarnings = false). Замечание, которое было в модуле и до правки, новым не считается.
Уровни — как у bslls: ошибка — разбор, Возврат со значением в процедуре, неизвестный символ
препроцессора, присваивание ЭтотОбъект; семантические правила — предупреждения, пока сверка на контрольных
дефектах не покажет, какие из них ложных не дают. Вызов метода общего модуля без исходников (Module.bin)
анализатор не разрешает — такие замечания отбрасываются (число — в сведениях о прогоне). При both замечание
обоих анализаторов — одна находка с кодом первого (bslls:), у находки в static.json — список analyzers.
Пробы в копии ИБ¶
Правило — <вид>/<исход>. Исходы: compile-error — ошибка компиляции (ошибка), runtime-error — код
скомпилировался, но упал при выполнении пробы (предупреждение: тело модуля объекта, ПриСозданииНаСервере с
данными копии), unknown — платформа ответила непонятно (ошибка: молчание не считается успехом), failed — упал
тест или открытие формы (ошибка).
probe¶
Компиляция изменённого модуля в контексте исполнения: сервер и внешнее соединение — пробой COM или YAxUnit, тонкий
клиент — YAxUnit ([checks] probes-server, probes-client). Контекст в «найдено: проба COM (внешнее соединение)».
Пример: probe/compile-error «Переменная не определена (Икс)». Исправить код; ошибка только в одном контексте —
чаще всего код не под той директивой или #Если.
query¶
Разбор текста запроса платформой (Новый Запрос + НайтиПараметры; [checks] queries). Пример: query/compile-error
«Поле не найдено "Номенклатура.Артикулл"». Исправить текст запроса. Предупреждение вместо ошибки — если запрос правкой
не менялся (ошибка была и до неё) или текст собран подстановкой (ошибка может быть от неё); запрос с переменными
частями, который не собрать, — «не проверено» с needs: ui.
session¶
Модуль сеанса или общий модуль, без которого не открывается сеанс внешнего соединения: COM не подключился с
ошибкой компиляции. Пример: session/compile-error с местом в модуле сеанса. Ошибка: в этой базе не откроется ни
один сеанс этого вида. Исправить модуль.
extcheck¶
Расширенная проверка изменённых модулей Конфигуратором во временном расширении ([checks] extcheck): общие модули,
модули форм и объектов, все режимы, включая веб-клиент. Режимы — в скобках сообщения («… (Внешнее соединение,
Сервер)»). Модуль, где ошибка первой стадии скрыла остальные, — «не проверено» («проверен частично»).
load¶
Выгрузка не загружается в копию ИБ (load/compile-error, источник «загрузка в ИБ»): битый XML, несогласованные
метаданные. Пробы при этом не выполняются. Исправить файл из сообщения (часто — после ручного слияния выгрузки).
scenario¶
Сценарный тест YAxUnit по изменённому методу упал (scenario/failed). Ошибка: изменилось поведение метода — или
тест устарел. Запустить тест локально, исправить код или тест.
smoke¶
Открытие изменённой формы (smoke/failed, при [smoke] severity = "warning" — smoke/runtime-error): ошибка в
обработчиках открытия или форма не закрывается. Форму, которая без параметров отказывается открываться, — «не
проверено». Исключить форму — [smoke] exclude.
designer¶
Проверка всех модулей Конфигуратором в том же прогоне (gate --designer): designer/compile-error — ошибка,
которой нет в базовой линии otk-designer-check.baseline.json; в той же строке, что ошибка другой проверки, —
её источник «полная проверка Конфигуратором (режимы)». load/compile-error от этого шага — редакция не загрузилась.
Ошибка типовой, которую не исправить, — принять базовой линией (otk designer-check --update-baseline,
закоммитить файл).
not-checked¶
«Не проверено» — проверка не выполнена из-за окружения, а не потому, что код чист. В JUnit — skipped, в Problems —
предупреждение not-checked/<проверка> (имя проверки из [checks]; включить или поставить зависимость — otk doctor):
not-checked/metadata— статика по метаданным выключена;not-checked/analyzers— нет выбранного анализатора BSL (BSL LS:environment.bslls,OTK_BSLLS, PATH, расширение VS Code «Language 1C (BSL)»; bsl-analyzer:environment.bslAnalyzer,OTK_BSL_ANALYZER, PATH) или он упал;not-checked/platform-api— нет справки платформы;not-checked/probes-server,not-checked/probes-client— нет копии ИБ, COM или YAxUnit;not-checked/queries— нет копии ИБ или исполнителя запросов;not-checked/extcheck— нет копии ИБ или временное расширение не загрузилось;not-checked/scenarios,not-checked/smoke— нет копии ИБ, YAxUnit или тонкого клиента.
Без имени проверки: запрос с переменными частями, проба, не выполненная из-за падения сеанса, модуль, «проверенный
частично». Где известно, чем закрыть, — то же needs, что у «не покрыто».
uncovered¶
«Не покрыто этим прогоном» — что этот метод не проверяет в принципе, сгруппировано по needs (чем закрыть):
designer:<контекст>(*— все режимы) — полная проверка Конфигуратором в режиме: контекст недоступен локально (environment.contexts) или у модуля нет пробы. Закрываетotk gate --designer(снимает в своих режимах) илиotk designer-check, в CI — задание otk-designer-check;ui— модуль команды, запрос из частей: UI и сценарные тесты;publication— модуль HTTP- и веб-сервиса: проверка на опубликованной базе.