Как добавить и убрать комментарий в коде 1С
Содержание
Одну строку закомментировать просто: поставьте // в её начале — и всё, что правее, встроенный язык 1С пропустит при компиляции. Чтобы убрать из работы сразу несколько строк, выделите их и нажмите Ctrl + Num / в Конфигураторе (серый слэш на цифровом блоке клавиатуры). Эта же комбинация с Shift комментарий снимает.
В 1С нет парного блочного комментария вроде /* … */ из других языков. Любой комментарий здесь — строчный: от символов // до конца строки. Поэтому «закомментировать блок» на практике означает «добавить // к каждой выделенной строке», и делают это горячей клавишей, а не вручную. Ниже — все рабочие способы: клавиши в Конфигураторе и в 1С:EDT, поведение комментариев внутри текста запроса, условная компиляция через препроцессор и то, как потом искать и чистить закомментированные участки.
Символ комментария и почему блочного нет
Единственный символ комментария во встроенном языке 1С — двойная косая черта //. Всё, что идёт после неё и до конца строки, компилятор игнорирует:
// Это комментарий на всю строку
Сумма = Цена * Количество; // А это пояснение к коду справа
Комментарий можно поставить и в середине строки — тогда отработает только то, что стоит левее //. Код справа от символа не выполнится.
Парной конструкции для многострочного комментария в языке 1С не существует. Если вам нужно выключить десять строк, у каждой из них должны появиться свои //. Вручную это долго и легко ошибиться, поэтому для блоков всегда используют горячую клавишу (см. следующий раздел).
В пустой строке // ставить не обязательно, но при массовом комментировании клавишей платформа всё равно добавит символы ко всем выделенным строкам, включая пустые. Это нормально и на работу не влияет.
Горячие клавиши в Конфигураторе
Основной инструмент разработчика по старой схеме — Конфигуратор. Выделите нужные строки (хотя бы частично захватив каждую) и примените одну из команд:
| Действие | Клавиши | Пункт меню |
|---|---|---|
| Добавить комментарий | Ctrl + Num / | Текст → Блок → Добавить комментарий |
| Убрать комментарий | Ctrl + Shift + Num / | Текст → Блок → Удалить комментарий |
Num / — это клавиша деления на цифровом блоке справа, а не слэш в основном ряду. Отсюда частая путаница.
На ноутбуках без отдельного цифрового блока комбинация с обычным / может не сработать. Выход — пользоваться пунктом меню Текст → Блок или вынести кнопки «Добавить/удалить комментарий» на панель редактора через Сервис → Параметры.
Команда «Добавить комментарий» ставит // в самое начало каждой выделенной строки, не считаясь с отступами. «Удалить комментарий» убирает ровно первую пару // в начале строки. Если строка была закомментирована дважды (//// текст), снять придётся за два нажатия.
Выделять строку целиком не обязательно. Если ничего не выделено, команда комментирует ту строку, на которой стоит курсор. Это удобно при отладке: подвели курсор к вызову процедуры, нажали Ctrl + Num / — вызов отключился, запустили, посмотрели поведение без него, вернули клавишей Ctrl + Shift + Num /. Так проще всего локализовать, какая именно строка вызывает проблему.
Полезные соседние команды того же меню Текст:
- 🔎 Форматирование блока (
Alt + Shift + F) — выравнивает отступы после того, как вы раскомментировали код. - ↹ Увеличить/уменьшить отступ (
Tab/Shift + Tabна выделении) — пригодится, когда комментарии сбили структуру.
Как это делается в 1С:EDT
Если вы разрабатываете в среде 1С:EDT (на базе Eclipse), раскладка клавиш другая. Здесь работает единая команда-переключатель:
- Закомментировать/раскомментировать строку или выделение —
Ctrl + /.
Обратите внимание: в 1С:EDT это обычный слэш в основном ряду, а не на цифровом блоке. Команда работает как тумблер — повторное нажатие на закомментированном блоке снимает комментарий. Отдельных «добавить» и «удалить», как в Конфигураторе, тут нет.
Если вы переходите с Конфигуратора на 1С:EDT, мышечная память по Ctrl + Num / будет мешать первые дни. Самый быстрый способ переучиться — повесить взгляд на то, что / теперь берётся из основного ряда.
Комментарии внутри текста запроса
Текст запроса на языке запросов 1С — это тоже код, и в нём комментарий ставится тем же символом //:
ВЫБРАТЬ
Номенклатура.Наименование, // выводим название товара
Номенклатура.Артикул
ИЗ
Справочник.Номенклатура КАК Номенклатура
// ГДЕ Номенклатура.ПометкаУдаления = ЛОЖЬ -- условие временно отключено
Комментарий в тексте запроса удобен, чтобы временно отключить условие в ГДЕ или лишнее поле и посмотреть, как изменится результат.
Главная ловушка: Конструктор запроса удаляет комментарии. Если вы написали запрос текстом с пояснениями, а потом открыли его в графическом конструкторе (Конструктор запроса) и нажали «ОК», все строки с // исчезнут — конструктор пересобирает текст заново и комментарии в него не переносит.
Что с этим делать:
- Храните важные пояснения к запросу не внутри его текста, а рядом — в комментарии модуля перед переменной запроса.
- Если правите сложный запрос с комментариями, правьте его как текст, не прогоняя через конструктор.
- Отключая условие на время отладки, помните, что после конструктора его придётся восстанавливать руками.
Условная компиляция через препроцессор
Иногда задача не «выключить код навсегда», а «выполнять его только в определённой среде»: часть на клиенте, часть на сервере, что-то только в веб-клиенте. Для этого есть инструкции препроцессора — они не комментируют код, а управляют тем, попадёт ли он в компиляцию:
#Если Сервер Тогда
// этот код скомпилируется и выполнится только на сервере
ЗаписатьВЖурналРегистрации("Старт обработки");
#ИначеЕсли ВебКлиент Тогда
// а это — только в веб-клиенте
ПоказатьПредупреждение(, "Операция недоступна в браузере");
#КонецЕсли
Инструкции начинаются с #: #Если, #ИначеЕсли, #Иначе, #КонецЕсли. В условии используются предопределённые символы среды — Клиент, Сервер, ТолстыйКлиент, ТонкийКлиент, ВебКлиент, МобильныйКлиент, ВнешнееСоединение, НаКлиенте, НаСервере — и логические операторы И, ИЛИ, НЕ.
Зачем это нужно вместо обычного комментария:
- Код для разных контекстов живёт в одном модуле, но каждая среда видит только свою часть.
- Платформа проверяет синтаксис только того блока, который относится к текущему режиму.
- Переключение среды не требует ручного комментирования и раскомментирования.
Не путайте препроцессор (#Если …) с директивами компиляции &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Директивы со знаком & ставятся перед объявлением процедуры и говорят, где она выполняется. Препроцессор со знаком # управляет включением фрагментов внутри кода. Это разные механизмы.
Типичный пример — общий модуль, у которого в свойствах установлены сразу несколько флагов («Клиент (управляемое приложение)», «Сервер», «Внешнее соединение»). Один и тот же текст модуля компилируется под разные контексты, и препроцессор отделяет серверную часть от клиентской внутри общих процедур. Без него пришлось бы дублировать код или держать вызовы, недоступные в части сред.
Для постоянного отключения куска кода препроцессор — не лучший выбор: он задуман под среды выполнения, а не под «спрятать на всякий случай». Для временного выключения проще комментарий, для окончательного удаления — убрать код совсем и опереться на историю хранилища или систему контроля версий.
Как оформлять комментарии: стандарт и БСП
Комментарий полезен, когда объясняет почему так сделано, а не пересказывает то, что и так видно в коде. Строка Счётчик = Счётчик + 1; // увеличиваем счётчик на единицу пользы не несёт.
В библиотеке стандартных подсистем (БСП) и в стандартах разработки 1С принят единый формат описания экспортных процедур и функций — блок комментариев над объявлением:
// Пересчитывает сумму документа по строкам табличной части.
//
// Параметры:
// Документ - ДокументСсылка.РеализацияТоваровУслуг - документ для пересчёта.
// ВключаяНДС - Булево - учитывать ли НДС в итоге.
//
// Возвращаемое значение:
// Число - итоговая сумма документа.
//
Функция РассчитатьСуммуДокумента(Документ, ВключаяНДС = Истина) Экспорт
Такой заголовок читается и человеком, и подсказкой синтакс-помощника. Правила оформления, которых стоит держаться:
- 📝 Описывайте назначение процедуры одной-двумя фразами, затем параметры с типами и смыслом.
- 🧭 Комментируйте неочевидные решения и обходы ошибок платформы — через полгода вы сами скажете спасибо.
- 🧹 Не оставляйте «кладбище» из закомментированного кода в рабочей версии: для истории есть хранилище конфигурации и Git.
Частые ошибки при комментировании
Несколько мест, где спотыкаются чаще всего:
- Жмут
/в основном ряду вместоNum /. В Конфигураторе блок комментируется именно цифровым слэшем. Обычный слэш просто вставит символ в текст. - Пытаются закрыть блок как в C. Конструкции
/* … */в языке 1С нет — компилятор выдаст ошибку. Только//построчно. - Комментируют строку с продолжением. Если оператор перенесён на несколько физических строк,
//в первой из них отключит только её, а «хвост» останется кодом и, скорее всего, вызовет синтаксическую ошибку. Комментируйте оператор целиком. - Теряют пояснения в запросе после конструктора. Описано выше — держите важные комментарии вне текста запроса.
- Коммитят закомментированный «на пробу» код. Он копится и мешает чтению. Удаляйте, а откат берите из истории версий.
Если после правок модуль «не видит» вашу функцию, проверьте, не закомментирована ли случайно строка Процедура … или Функция … — тогда весь блок становится недоступным для вызова.
Поиск и анализ закомментированного кода
Закомментированные участки не компилируются и не участвуют в синтаксическом контроле, но они остаются в тексте модуля и их видно при чтении. Чтобы навести порядок:
- 🔎 Глобальный поиск по текстам модулей (
Ctrl + Shift + Fв Конфигураторе, пунктПравка → Глобальный поиск) — ищите характерные хвосты временного кода, например фрагмент// ВРЕМЕННОили// TODO, если вы помечаете ими отключённые куски. - ✔️ Синтаксический контроль (
Конфигурация → Синтаксический контроль) проверит только живой код — закомментированный он молча пропустит. Это удобно: отключив проблемную строку комментарием, вы сразу увидите, уходит ли ошибка. - 🧩 В 1С:EDT доступна подсветка и сворачивание блоков, а поиск по проекту (
Ctrl + H) умеет искать по регулярным выражениям — так проще вычистить все//-заглушки разом.
Разумная привычка: помечать временно отключённый код однотипной меткой (// TODO, // FIXME, инициалы и дата). Тогда перед релизом такой код находится одним поиском, и ничего «временного» не уезжает в рабочую базу.
Прежде чем массово удалять закомментированные блоки в рабочей конфигурации, убедитесь, что текущая версия сохранена в хранилище или в системе контроля версий. Удалённый без истории код восстановить будет неоткуда.
Частые вопросы
Можно ли в 1С закомментировать блок одной парой символов, как /* */ в других языках?
//. Блок строк комментируется горячей клавишей, которая добавляет // к каждой строке.Какая клавиша комментирует код в Конфигураторе?
Ctrl + Num / — добавить комментарий, Ctrl + Shift + Num / — убрать. Слэш берётся с цифрового блока. Те же команды есть в меню Текст → Блок.Почему в 1С:EDT не работает Ctrl + Num /?
Ctrl + / (слэш из основного ряда). Она же и снимает комментарий повторным нажатием.Пропали комментарии в запросе — куда они делись?
// не сохраняет. Держите пояснения вне текста запроса.Чем препроцессор отличается от комментария?
// выключает код всегда. Препроцессор #Если … #КонецЕсли включает код в компиляцию в зависимости от среды (клиент, сервер, веб-клиент) — это условная компиляция, а не отключение.