Как добавить и убрать комментарий в коде 1С

· 9 мин

Содержание

Одну строку закомментировать просто: поставьте // в её начале — и всё, что правее, встроенный язык 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.
Проверьте себя
Чем закомментировать одну строку во встроенном языке 1С?
Какой клавишей закомментировать блок строк в Конфигураторе?
Что произойдёт с комментариями // в запросе после Конструктора запроса?
Чем управляет инструкция #Если Сервер Тогда?

Частые ошибки при комментировании

Несколько мест, где спотыкаются чаще всего:

  • Жмут / в основном ряду вместо Num /. В Конфигураторе блок комментируется именно цифровым слэшем. Обычный слэш просто вставит символ в текст.
  • Пытаются закрыть блок как в C. Конструкции /* … */ в языке 1С нет — компилятор выдаст ошибку. Только // построчно.
  • Комментируют строку с продолжением. Если оператор перенесён на несколько физических строк, // в первой из них отключит только её, а «хвост» останется кодом и, скорее всего, вызовет синтаксическую ошибку. Комментируйте оператор целиком.
  • Теряют пояснения в запросе после конструктора. Описано выше — держите важные комментарии вне текста запроса.
  • Коммитят закомментированный «на пробу» код. Он копится и мешает чтению. Удаляйте, а откат берите из истории версий.

Если после правок модуль «не видит» вашу функцию, проверьте, не закомментирована ли случайно строка Процедура … или Функция … — тогда весь блок становится недоступным для вызова.

Поиск и анализ закомментированного кода

Закомментированные участки не компилируются и не участвуют в синтаксическом контроле, но они остаются в тексте модуля и их видно при чтении. Чтобы навести порядок:

  • 🔎 Глобальный поиск по текстам модулей (Ctrl + Shift + F в Конфигураторе, пункт Правка → Глобальный поиск) — ищите характерные хвосты временного кода, например фрагмент // ВРЕМЕННО или // TODO, если вы помечаете ими отключённые куски.
  • ✔️ Синтаксический контроль (Конфигурация → Синтаксический контроль) проверит только живой код — закомментированный он молча пропустит. Это удобно: отключив проблемную строку комментарием, вы сразу увидите, уходит ли ошибка.
  • 🧩 В 1С:EDT доступна подсветка и сворачивание блоков, а поиск по проекту (Ctrl + H) умеет искать по регулярным выражениям — так проще вычистить все //-заглушки разом.

Разумная привычка: помечать временно отключённый код однотипной меткой (// TODO, // FIXME, инициалы и дата). Тогда перед релизом такой код находится одним поиском, и ничего «временного» не уезжает в рабочую базу.

Прежде чем массово удалять закомментированные блоки в рабочей конфигурации, убедитесь, что текущая версия сохранена в хранилище или в системе контроля версий. Удалённый без истории код восстановить будет неоткуда.

Частые вопросы

Можно ли в 1С закомментировать блок одной парой символов, как /* */ в других языках?
Нет. Во встроенном языке 1С есть только строчный комментарий //. Блок строк комментируется горячей клавишей, которая добавляет // к каждой строке.
Какая клавиша комментирует код в Конфигураторе?
Ctrl + Num / — добавить комментарий, Ctrl + Shift + Num / — убрать. Слэш берётся с цифрового блока. Те же команды есть в меню Текст → Блок.
Почему в 1С:EDT не работает Ctrl + Num /?
В 1С:EDT другая команда — Ctrl + / (слэш из основного ряда). Она же и снимает комментарий повторным нажатием.
Пропали комментарии в запросе — куда они делись?
Скорее всего, запрос прошёл через Конструктор запроса. Он пересобирает текст и строки с // не сохраняет. Держите пояснения вне текста запроса.
Чем препроцессор отличается от комментария?
Комментарий // выключает код всегда. Препроцессор #Если … #КонецЕсли включает код в компиляцию в зависимости от среды (клиент, сервер, веб-клиент) — это условная компиляция, а не отключение.