Синтаксический контроль кода в Конфигураторе 1С 8.3
Содержание
Чтобы проверить синтаксис в 1С, откройте модуль в Конфигураторе и нажмите Ctrl+F7. Платформа разберёт текст текущего модуля и выведет ошибки в окно служебных сообщений. Если ошибок нет, появится сообщение, что синтаксических ошибок не обнаружено.
Для проверки всей конфигурации разом служит команда Конфигурация → Проверка конфигурации.... Она проходит по всем модулям сразу в нескольких контекстах: тонкий клиент, сервер, веб-клиент, внешнее соединение. Всё ниже относится к платформе 8.3 и одинаково работает в любой конфигурации: БП, ЗУП, УТ, самописной.
Быстрая проверка синтаксиса одного модуля
Это ежедневный инструмент программиста. Пишете процедуру, нажимаете Ctrl+F7, смотрите результат.
- Откройте модуль: модуль объекта, менеджера, формы, общий модуль или модуль внешней обработки.
- Поставьте курсор в любое место текста.
- Нажмите
Ctrl+F7. Та же команда есть на панели инструментов редактора модуля (кнопка с галочкой) и в главном меню, пока активно окно модуля. - Посмотрите окно сообщений внизу. Двойной щелчок по строке ошибки переносит курсор к нужной строке и колонке.
Проверка модуля работает только с текстом этого модуля. Она видит процедуры текущего модуля, экспортные методы общих модулей и глобальный контекст. Но она не прогоняет код и не знает, какие данные придут в переменные.
Внешние обработки и отчёты (.epf, .erf) проверяются так же. Откройте файл через Файл → Открыть в Конфигураторе, перейдите в модуль и нажмите Ctrl+F7. Базу при этом обновлять не нужно.
Проверка при обновлении конфигурации базы данных
Синтаксис проверяется и автоматически. Когда вы нажимаете F7 («Обновить конфигурацию
базы данных»), платформа контролирует все изменённые модули. Если в них есть ошибки, обновление не выполнится, а ошибки появятся в окне сообщений.
Поэтому привычка «сохранил и обновил» ловит грубые опечатки. Но ловит поздно и только в изменённых модулях. Ручная проверка Ctrl+F7 после каждой правки быстрее.
Проверка синтаксиса всей конфигурации
Когда правок много, проверять модули по одному неудобно. Например, после объединения конфигураций, обновления доработанной типовой или загрузки чужого .cf.
Откройте Конфигурация → Проверка конфигурации.... В окне отметьте нужные проверки и режимы, нажмите «Выполнить».
Основные флажки в этом окне:
- 🔍 Проверка логической целостности конфигурации — объекты, на которые есть ссылки, но которых нет; неверные свойства метаданных.
- 🔗 Поиск неправильных ссылок — ссылки на удалённые объекты в реквизитах, формах, правах.
- 🧾 Синтаксический контроль модулей — то же, что
Ctrl+F7, но по всем модулям сразу. - ⚙️ Расширенная проверка — дополнительные пункты: поиск неиспользуемых процедур и функций, проверка существования назначенных обработчиков, поиск пустых обработчиков, проверка использования модальности и синхронных вызовов.
Полная проверка большой типовой конфигурации идёт несколько минут. На рабочем ноутбуке это обычно 2–10 минут для БП или ЗУП. Расширенная проверка заметно увеличивает время, поэтому включайте её, когда действительно нужна.
Проверка конфигурации читает основную конфигурацию, а не конфигурацию базы данных. Если вы ещё не нажали «Обновить конфигурацию базы данных», проверяется то, что открыто в дереве, со всеми несохранёнными в базу правками.
Проверка расширений
Расширение проверяется отдельно. Откройте его через Конфигурация → Расширения конфигурации, затем запустите проверку из меню открытого расширения. Ошибки расширения часто связаны с заимствованными объектами: в основной конфигурации метод переименовали, а расширение по-прежнему перехватывает старое имя.
Режимы проверки: клиент, сервер, веб-клиент
Один и тот же модуль 1С компилируется по-разному в зависимости от того, где он выполняется. Поэтому в окне проверки конфигурации есть флажки режимов.
| Режим | Что ловит |
|---|---|
| Тонкий клиент | Серверные типы и методы в клиентском коде |
| Веб-клиент | То же плюс ограничения браузера |
| Сервер | Клиентские методы и формы в серверном коде |
| Внешнее соединение | Код, который вызывают через COM из внешних программ |
| Толстый клиент (управляемое приложение) | Код, который выполняется в толстом клиенте |
| Мобильный клиент / сервер | Нужно только для мобильных конфигураций |
Пример. В модуле формы есть процедура с директивой &НаКлиенте, а внутри неё создаётся запрос:
&НаКлиенте
Процедура Заполнить(Команда)
Запрос = Новый Запрос; // ошибка в режиме тонкого клиента
Запрос.Текст = "ВЫБРАТЬ ...";
КонецПроцедуры
Ctrl+F7 в толстом клиенте может промолчать, а проверка в режиме тонкого клиента
выдаст Тип не определен (Запрос). Исправление — вынести работу с запросом в процедуру с директивой &НаСервере или &НаСервереБезКонтекста и вызвать её с клиента.
Минимальный набор режимов для типовой управляемой конфигурации: тонкий клиент, веб-клиент, сервер, внешнее соединение. Именно так проверяют код перед поставкой.
Как прочитать сообщение об ошибке
Каждая строка в окне сообщений построена по одной схеме:
{ОбщийМодуль.РасчетыСКонтрагентами.Модуль(148,12)}: Переменная не определена (СуммаДолга)
Разберём по частям:
ОбщийМодуль.РасчетыСКонтрагентами— объект метаданных.Модуль— какой именно модуль. БываетМодульОбъекта,МодульМенеджера,Форма.ФормаДокумента.Форма.(148,12)— строка и колонка.- После двоеточия — текст ошибки, в скобках — имя, на котором споткнулся разбор.
Двойной щелчок открывает модуль на этой позиции. Если строк много, начинайте с первой. Одна пропущенная КонецЕсли порождает каскад: дальше по модулю платформа находит десятки «ошибок», которых на самом деле нет.
При проверке конфигурации к сообщению добавляется режим, например (Проверка: Тонкий клиент). По нему видно, в каком контексте код не компилируется.
Частые синтаксические ошибки и их исправление
Тексты ниже — то, что реально выводит Конфигуратор. Справа — что обычно за ними стоит.
| Сообщение | Типичная причина | Что сделать |
|---|---|---|
Переменная не определена (Имя) | Опечатка в имени, переменная объявлена в другой процедуре, серверная переменная в клиентском коде | Проверить написание, область видимости и директиву компиляции |
Процедура или функция с указанным именем не определена (Имя) | Нет такого метода, метод не экспортный, вызов серверного метода из клиента без директивы | Добавить Экспорт, проверить флажки общего модуля «Клиент», «Сервер», «Вызов сервера» |
Ожидается символ ';' | Пропущена точка с запятой в конце предыдущего оператора | Смотреть строку выше указанной |
Ожидается ключевое слово 'КонецЕсли' (или КонецЦикла, КонецПроцедуры) | Не закрыт блок | Найти незакрытый Если или Для; помогает сворачивание блоков в редакторе |
Слишком много фактических параметров | Метод вызван с лишним аргументом | Сверить вызов с объявлением метода |
Недостаточно фактических параметров | Пропущен обязательный параметр | Передать параметр или задать ему значение по умолчанию |
Тип не определен (Имя) | Тип недоступен в этом контексте или объект удалён из метаданных | Перенести код на сервер, проверить, существует ли объект |
Модальность и синхронные вызовы
Если у конфигурации в свойствах стоит режим использования модальности «Не использовать», вызовы Вопрос(), Предупреждение(), ОткрытьФормуМодально() дают ошибку при проверке. Решение — асинхронные аналоги: ПоказатьВопрос(), ПоказатьПредупреждение(), ОткрытьФорму() с обработчиком оповещения.
Аналогично работает режим использования синхронных вызовов расширений платформы и внешних компонент. Это не опечатки, а требование к архитектуре кода, и проверка конфигурации помогает найти все такие места разом.
Что синтаксический контроль не найдёт: отладчик
Синтаксис может быть идеален, а код всё равно падает. Компилятор 1С не знает типов переменных во время выполнения. Строка Контрагент.ИНН пройдёт проверку, даже если в Контрагент придёт Неопределено.
Такие ошибки видны только при запуске:
- ❌
Поле объекта не обнаружено (ИНН)— у значения нет такого свойства; - ❌
Метод объекта не обнаружен (Имя)— у значения нет такого метода; - ❌
Значение не является значением объектного типа— обращение к свойству уНеопределено; - ❌
Деление на 0,Индекс находится за границами диапазона.
Здесь помогает отладчик.
Как найти ошибку отладчиком
- В Конфигураторе запустите
Отладка → Начать отладку(F5) в нужном клиенте. - Включите
Отладка → Остановка по ошибке. Отладчик остановится прямо на строке, где возникло исключение, даже если оно перехвачено вПопытка ... Исключение. - Поставьте точку останова (
F9) перед подозрительным местом, если нужно посмотреть, как к нему пришли данные. - Шагайте по коду:
F11— зайти в вызываемый метод,F10— выполнить строку целиком,Shift+F11— выйти из метода. - Значения переменных смотрите в табло или через
Shift+F9(«Вычислить выражение»). - Окно «Стек вызовов» показывает цепочку, через которую выполнение пришло в текущую строку.
Отладка серверного кода в клиент-серверной базе
В файловой базе серверный код отлаживается сразу. В клиент-серверной серверу 1С нужно разрешить отладку: агент сервера запускают с ключом -debug. Начиная с 8.3.7 доступна отладка по протоколу HTTP, тогда подключение идёт через сервер отладки.
Чтобы добавить ключ -debug, службу агента сервера 1С придётся перезапустить. Все пользователи, работающие с базами этого сервера, будут отключены. Делайте это в нерабочее время или на тестовом сервере. В рабочей базе с включённой отладкой сервер работает медленнее.
Автоматическая проверка синтаксиса и качества кода
Ручная проверка зависит от дисциплины. В команде из трёх и более разработчиков её переносят в автоматический прогон.
Пакетный режим Конфигуратора
Проверку модулей можно запустить из командной строки, без открытия окна Конфигуратора:
"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /F"D:\Bases\Test" /N"Администратор" /P"" ^
/CheckModules -ThinClient -WebClient -Server -ExternalConnection ^
/Out "D:\Logs\check.txt" /DisableStartupDialogs
Номер версии в пути подставьте свой. Для клиент-серверной базы вместо /F используется /S"сервер\база".
Ключ /CheckConfig запускает полную проверку конфигурации, как в одноимённом окне. Набор проверок задают его параметрами, например -ConfigLogIntegrity (логическая целостность) и -IncorrectReferences (неправильные ссылки). Точный список параметров для вашей версии платформы смотрите в синтакс-помощнике, раздел о параметрах командной строки.
Результат попадает в файл из /Out. Код возврата процесса ненулевой, если найдены ошибки, — по нему скрипт решает, пропускать ли сборку дальше.
Анализаторы кода
Синтаксический контроль отвечает на вопрос «скомпилируется ли». Анализаторы отвечают на вопрос «хорошо ли написано»:
- 🧰 1С:Enterprise Development Tools (EDT) проверяет код на лету, прямо при наборе, и подсвечивает нарушения стандартов разработки.
- 🧰 АПК («Автоматизированная проверка конфигураций») — конфигурация, которая проверяет выгрузку на соответствие стандартам 1С.
- 🧰 BSL Language Server и плагин SonarQube для 1С — открытые инструменты: сотни диагностик, от неиспользуемых переменных до запросов в цикле.
- 🧰 vanessa-runner — набор скриптов для CI; умеет запускать синтаксический контроль и тесты одной командой.
Типичная схема: разработчик помещает изменения в хранилище или Git, сервер сборки поднимает тестовую базу, прогоняет /CheckModules и анализатор, а при ошибках присылает отчёт. До рабочей базы доходит только код, прошедший проверку.
Частые вопросы
Можно ли проверить синтаксис в режиме 1С:Предприятие, без Конфигуратора?
Нужен ли монопольный доступ к базе для проверки конфигурации?
Почему проверка не нашла ошибку, а у пользователя код падает?
Как проверить синтаксис текста запроса?
Ctrl+F7 текст запроса внутри строки не разбирает — для платформы это обычная строка.