Ошибки

Вкладка полностью переработана начиная с версии 3.2.0 (бета). В 3.1.2 она перечисляет только ошибки компиляции и дублирующиеся идентификаторы.

Вкладка Ошибки анализирует всю базу и перечисляет ошибки и предупреждения в её коде: поля, триггеры, колонки представлений, печатные отчёты, глобальный код и триггер «After Open». Анализ выполняет анализатор, перенесённый из анализатора Ninox: то, что он сообщает, совпадает с тем, что сказал бы Ninox. Каждая строка ведёт прямо к проблемному коду.

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

Итог и фильтры

Фильтры вкладки «Ошибки»

В заголовке показан итог: «Нет ошибок», «3 ошибка(ок)», «3 ошибка(и), 12 предупреждение(й)», «36 предупреждение(й)»…

Кнопка Фильтры открывает панель Отображаемая диагностика: по переключателю на каждый тип диагностики, в двух группах — Ошибки и Предупреждения. Каждая строка показывает, сколько диагностик этого типа есть в базе, — даже когда тип скрыт: вы видите и то, что скрываете, и то, что показываете. Когда какие-то типы скрыты, кнопка напоминает об этом («Скрыто типов: 2»); Показать всё возвращает их. Фильтры запоминаются браузером и действуют для всех баз.

О чём сообщается

Ошибки мешают коду работать:

ФильтрО чём сообщается
Ошибки компиляцииКод, который Ninox отвергает: формула не выполняется.
Дублирующиеся IDНесколько полей одной таблицы имеют один и тот же внутренний идентификатор (например, поле ввода и визуальный элемент): ссылки становятся неоднозначными.
Ошибки анализатораОшибки, которые находит анализатор Ninext и о которых Ninox не сообщил.
Ошибки встроенных содержимыхСинтаксическая ошибка JavaScript в нативном блоке #{ … }#.

Предупреждения указывают на код, который работает, но, скорее всего, не так, как вы думаете:

ФильтрО чём сообщается
АнализаторПредупреждения Ninox и неверно оформленные аннотации NativeJS (неизвестный тип, ненайденная таблица).
Серверный контекстКод без эффекта в месте выполнения: функция интерфейса, например alert() или openRecord(), или нативный блок #{ … }#, помещённые в триггер таблицы (после создания, после изменения) или в do as server. На сервере они молча игнорируются.
Застывшие ошибкиОшибки, которые Ninox всё ещё показывает, хотя формула исправна (см. ниже).
Неразрешённые ссылкиЧтение поля-ссылки, целевая таблица которого больше не существует (таблица удалена, внешняя база отсутствует): оно даёт «void», и любой переход через точку не работает.
Встроенное содержимоеТипизированный блок JavaScript, который ничего не возвращает — на всех путях или только на некоторых; асинхронный блок, который никогда не вызывает callback; несбалансированный HTML, передаваемый в html() (тег, который так и не закрыт, закрывающий тег без пары); CSS с несбалансированными фигурными скобками или с правилами, которые браузер отбросит.
Мёртвый код в скриптахПеременные, объявленные через var или let, но ни разу не прочитанные.
Неиспользуемые глобальные функцииГлобальные функции, которые не вызывает ни один элемент базы.
Неиспользуемые формулыФормулы, на которые не ссылается никакой код.

Неиспользуемые функции и формулы — лишь кандидаты на удаление: вызов, построенный динамически или сделанный из JavaScript, ускользает от анализа, а формула, показанная в форме или представлении, остаётся полезной, даже если её не читает никакой код. Проверьте, прежде чем удалять.

Как читать строку

Диагностика на вкладке «Ошибки»

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

Семейства носят название своего фильтра, кроме следующих:

ФильтрСемейство в списке
Ошибки анализатораДополнительные ошибки анализатора Ninext
АнализаторПредупреждения анализатора
Серверный контекстКод вне своего контекста выполнения
Застывшие ошибкиЗастывшие ошибки (формула исправна)
Ошибки встроенных содержимых и Встроенное содержимоеОдно семейство — Встроенные JS / HTML / CSS, — у которого может быть до двух кружков: один для его ошибок, другой для его предупреждений.

Каждая строка содержит:

  • курсивом — сообщение (серым для ошибки, янтарным для предупреждения), а за ним — фрагмент проблемного кода; когда два типа не согласуются, отдельная фраза говорит, какие именно;
  • затронутый элемент, представленный так же, как на вкладке Поля и формулы: значок типа, значок зависимостей, «Fx», навигационная цепочка.

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

Переход к коду

Щёлкните по выделенному жирным фрагменту навигационной цепочки: Ninext откроет редактор в нужном месте. Для глобального кода диагностика привязывается к содержащей её функции — «Глобальные функции › имяФункции», — и редактор глобального кода открывается на этой функции. Триггер «After Open» открывается так же.

Красная кнопка, которая появляется при наведении справа от строки в режиме редактирования («Edit mode»), для строки, относящейся к полю, выделяет это поле в его форме, а для остальных строк открывает редактор кода.

Ниже, в демонстрационной базе, — щелчок по выделенному жирным фрагменту строки, относящейся к формуле поля: Ninext открывает запись таблицы, окно поля, а затем большой редактор формул, где проблемный фрагмент подчёркнут; при наведении на него появляется сообщение. Другие элементы навигационной цепочки открывают свой уровень: щелчок по имени поля открывает запись и окно поля, без редактора.

С вкладки «Ошибки» щелчок по выделенному жирным фрагменту открывает редактор проблемной формулы, ошибочный фрагмент подчёркнут

Анализ в фоновом режиме

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

Застывшие ошибки

Бывает, что Ninox компилирует поле-формулу во время перезагрузки схемы, ещё до того, как она загрузилась полностью, и больше не перекомпилирует его: поле весь сеанс показывает ошибки, хотя его формула верна. Ninext со своей стороны перекомпилирует формулу; если ошибки при этом не появляются, он относит их к категории Застывшие ошибки.

Что делать: перезагрузите базу или сохраните любое изменение схемы.

Во время ввода — в редакторах Ninox

Ошибки и предупреждения подчёркиваются и во время ввода в редакторах скриптов Ninox (большой редактор формул, панель поля или таблицы):

  • красная волнистая линия — для ошибки, янтарный пунктир — для предупреждения;
  • при наведении на подчёркнутый фрагмент всплывающая подсказка объясняет проблему и говорит, какие типы не согласуются;
  • подчёркивание появляется, только когда Ninext точно знает, в какой таблице выполняется код;
  • приоритет у списка автодополнения: пока он показан, подсказки не открываются.

Если выделить слово, подсвечиваются остальные его вхождения — в редакторах Ninox, в Консоли и в блоках кода Ninext. При наведении на редактор в правом верхнем углу появляются две кнопки: Форматировать и Отладка в Консоли (см. Консоль).

Остаточные колонки в табличных представлениях

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

Чтобы исправить её:

  1. Нажмите Формула — выделенное жирным последнее звено навигационной цепочки («Таблица › Представление › … › Формула»).
  2. Ninext откроет представление, редактор колонки, а затем редактор её формулы.
  3. Нажмите OK в редакторе формулы, затем в редакторе колонки.

При сохранении Ninox обновляет конфигурацию представления и убирает ссылки на несуществующие поля. Ошибка исчезает из Ninext.