Ошибки
Вкладка полностью переработана начиная с версии 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 ни о чём не сообщает, поскольку поле просто удалено из схемы: это остаточная ссылка, сохранившаяся в конфигурации колонок представления.
Чтобы исправить её:
- Нажмите Формула — выделенное жирным последнее звено навигационной цепочки («Таблица › Представление › … › Формула»).
- Ninext откроет представление, редактор колонки, а затем редактор её формулы.
- Нажмите OK в редакторе формулы, затем в редакторе колонки.
При сохранении Ninox обновляет конфигурацию представления и убирает ссылки на несуществующие поля. Ошибка исчезает из Ninext.
