Комментирование блока кода в Конфигураторе и EDT

· 9 мин

Содержание

Чтобы закомментировать много строк в 1С, выделите их в модуле и нажмите Ctrl + / на цифровом блоке клавиатуры. Снять комментарий — Ctrl + Shift + / на том же блоке. Обе команды есть в меню Конфигуратора Текст → Блок: «Добавить комментарий» и «Удалить комментарий».

Частое заблуждение — искать в языке 1С многострочный комментарий вроде /* ... */. Его нет. Комментарий в 1С только однострочный, он начинается с // и длится до конца строки. Поэтому «закомментировать блок» значит поставить // в начало каждой выделенной строки — именно это и делают горячие клавиши .

Горячие клавиши для комментирования блока в Конфигураторе

Порядок действий в модуле объекта, общем модуле или модуле формы одинаковый:

  1. Выделите нужные строки мышью или клавишами Shift + ↓. Достаточно задеть хотя бы часть каждой строки — комментарий ставится на всю строку целиком.
  2. Нажмите Ctrl + / (клавиша «/» справа, на цифровом блоке).
  3. Чтобы вернуть код, выделите те же строки и нажмите Ctrl + Shift + /.

Сводка команд редактора, которые пригодятся при работе с блоками:

ДействиеКонфигураторМеню
Закомментировать выделенные строкиCtrl + Num /Текст → Блок → Добавить комментарий
Раскомментировать выделенные строкиCtrl + Shift + Num /Текст → Блок → Удалить комментарий
Сдвинуть блок вправоTabТекст → Блок → Сдвинуть вправо
Сдвинуть блок влевоShift + TabТекст → Блок → Сдвинуть влево
Отформатировать блокAlt + Shift + FТекст → Блок → Форматировать

Если строку закомментировать дважды, в начале появится ////. Команда «Удалить комментарий» снимает одну пару слешей за раз, поэтому такую строку придётся раскомментировать два раза.

Если на ноутбуке нет цифрового блока

Клавиша / на основной части клавиатуры в этой комбинации не срабатывает. Варианты обхода:

  • ⌨️ встроенный цифровой блок ноутбука — включается через Fn + NumLock или отдельной клавишей, после этого «/» оказывается на одной из буквенных клавиш;
  • 🖱️ меню Текст → Блок — медленнее, но работает всегда;
  • 🧩 экранная клавиатура Windows (osk) — в параметрах включите цифровую клавиатуру;
  • 🔌 внешний USB-нампад — самый удобный вариант для тех, кто много пишет код.

Как это устроено в 1С:EDT

В 1С:Enterprise Development Tools работают сочетания, привычные по редакторам на базе Eclipse. Ctrl + / на основной клавиатуре переключает комментарий у выделенных строк: если строки не закомментированы — ставит //, если закомментированы — снимает. Отдельная клавиша для снятия комментария не нужна, а цифровой блок не требуется.

Комментарий в конце строки

Комментарий не обязан занимать строку целиком. Всё, что стоит после //, игнорируется, а код до слешей выполняется:

СуммаСкидки = Сумма * 0.05; // 5% — временная акция, до конца квартала

Так удобно пояснять «магические» числа и нестандартные решения. Но горячие клавиши блока работают только с началом строки: хвостовые комментарии они не трогают.

Комментарий-описание над процедурой

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

// Возвращает остаток товара на складе на указанную дату.
//
// Параметры:
//  Номенклатура - СправочникСсылка.Номенклатура - товар.
//  Склад        - СправочникСсылка.Склады - склад.
//
// Возвращаемое значение:
//  Число - остаток в базовых единицах.
//
Функция ОстатокТовара(Номенклатура, Склад) Экспорт

Такие блоки не надо удалять при чистке модуля. Редактор показывает текст описания в подсказке, когда вы набираете вызов метода, а коллеге не придётся читать тело функции.

Как отключить часть текста запроса

Запрос в модуле — это строковый литерал, и с ним легко ошибиться. В тексте запроса действует собственный однострочный комментарий: тот же //, но поставленный внутри строки, после вертикальной черты.

Запрос = Новый Запрос;
Запрос.Текст =
	"ВЫБРАТЬ
	|	Номенклатура.Ссылка КАК Ссылка,
	|	Номенклатура.Наименование КАК Наименование
	|	//, Номенклатура.Артикул КАК Артикул
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура";

Здесь поле «Артикул» отключено комментарием языка запросов. Строка остаётся частью текста, но платформа её не выполняет.

Если выделить такие строки и нажать Ctrl + Num /, слеши встанут перед чертой |, то есть станут комментарием встроенного языка, а не запроса. С промежуточными строками это обычно проходит, но есть ловушка:

Последняя строка запроса содержит закрывающую кавычку и ;. Закомментируете её вместе с блоком — литерал не закроется, и модуль перестанет компилироваться. Конец строкового литерала комментируйте только вручную и с проверкой синтаксиса.

Висячая запятая

Самая частая ошибка при отключении полей — запятая. Если закомментировать последнее поле в списке ВЫБРАТЬ, у предпоследнего остаётся запятая перед ИЗ, и запрос падает с синтаксической ошибкой.

Два приёма, которые снимают проблему:

  • ✅ переносите запятую в начало строки отключаемого поля (//, Поле КАК Поле), как в примере выше;
  • ✅ при отключении условия в ГДЕ следите за связками И/ИЛИ: комментируйте условие вместе со своим И.

Конструктор запросов и консоль: где комментарии исчезают

Конструктор запроса не хранит текст в исходном виде. Он разбирает запрос, а при нажатии «ОК» собирает текст заново. Комментарии внутри запроса при этом пропадают — вместе с отключёнными полями и условиями.

Что из этого следует на практике:

  1. Отключили поле комментарием, а потом открыли запрос конструктором — после «ОК» закомментированное поле удалится насовсем.
  2. Если нужно сохранить отключённый вариант, скопируйте текст запроса в отдельный комментарий модуля или в заметку до открытия конструктора.
  3. Для экспериментов удобнее консоль запросов (обработка из комплекта поставки или любая проверенная): вставили текст, закомментировали строку через //, выполнили, сравнили результат.

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

Модуль управляемой формы: директивы и обработчики

В модуле формы у каждой процедуры есть директива компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста и другие. Комментируя процедуру целиком, захватывайте и её директиву.

//&НаСервере
//Процедура ЗаполнитьТаблицуНаСервере()
//	Объект.Товары.Очистить();
//КонецПроцедуры

Если оставить директиву открытой, она «приклеится» к следующей процедуре модуля. В лучшем случае модуль не скомпилируется, в худшем — следующая процедура молча сменит контекст исполнения.

Обработчики событий формы

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

Перед публикацией такой правки:

  1. Откройте форму в редакторе и найдите элемент или команду, где указан обработчик.
  2. Очистите поле обработчика в палитре свойств или верните процедуру.
  3. Запустите Конфигурация → Проверка конфигурации и включите в расширенной проверке пункт о существовании назначенных обработчиков.

Клиент и сервер вперемешку

Частый сценарий: клиентская процедура вызывает серверную. Закомментировали серверную — клиентская перестала компилироваться, потому что вызывает несуществующий метод. Комментируйте парой: вызов и вызываемую процедуру, либо оставьте у серверной процедуры заглушку с пустым телом.

Отладка без лишних комментариев

Многие комментируют код, чтобы «посмотреть, что будет без этого куска». Отладчик часто позволяет обойтись без правки модуля.

ЗадачаЧем заменить комментирование
Понять, доходит ли выполнение до строкиТочка останова: F9 на строке
Остановиться только на нужной записиТочка останова с условием (через контекстное меню точки)
Проверить значение без лишнего кодаShift + F9 — «Вычислить выражение»
Временно не останавливатьсяОтключить точку останова, а не удалять её
Пройти код по шагамF10 — шаг с обходом, F11 — шаг с заходом

На закомментированной строке точку останова поставить нельзя: для отладчика такой строки как кода не существует. Если отладчик «проскакивает» нужное место, первым делом проверьте, не стоит ли перед строкой //.

Условная компиляция вместо комментария

Инструкции препроцессора #Если ... Тогда ... #КонецЕсли исключают код из компиляции в определённом контексте. Типичный случай — серверный код в общем модуле, который не должен попасть на клиент:

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
	// код, который выполняется только на сервере
#КонецЕсли

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

Области вместо комментирования

Если код мешает читать модуль, но нужен, его не обязательно комментировать. Оберните фрагмент в #Область ИмяОбласти ... #КонецОбласти — редактор позволит свернуть его в одну строку, а код продолжит работать.

Порядок в модуле: что делать с закомментированным кодом

Закомментированный фрагмент — временная мера. Оставленный в рабочей конфигурации, он мешает обновлениям: при сравнении и объединении с новым релизом типовой конфигурации такие блоки дают лишние различия.

Хорошие привычки:

  • 🧹 удаляйте отключённый код, как только изменение проверено. История изменений хранится в хранилище конфигурации или в Git, если вы работаете в EDT;
  • 🏷️ если блок должен пожить, подпишите его: кто отключил, когда и почему — // Отключено 07.10, Иванов: задвоение движений по 41 счёту, задача 1234;
  • 🔎 ищите забытые фрагменты глобальным поиском по конфигурации (Правка → Глобальный поиск) по своим меткам или по характерным строкам вроде //Процедура;
  • 🧩 в типовой конфигурации на поддержке не комментируйте типовой код без нужды. Изменение лучше вынести в расширение: там можно заменить процедуру своей, не трогая исходник.

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

Что пойдёт не так и как быстро найти причину

Диагностика: выберите симптом

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

Можно ли в 1С закомментировать текст между строк, как /* */ в других языках?
Нет. В языке 1С есть только однострочный комментарий //. Для блока ставьте // в каждую строку горячими клавишами.
Влияют ли комментарии на скорость работы базы?
Нет. Комментарии отбрасываются при компиляции модуля и не выполняются. Мешают они только читаемости и сравнению конфигураций.
Почему после «Удалить комментарий» в строке остались слеши?
Строку закомментировали дважды, и в начале стояло ////. Команда снимает одну пару за раз — повторите её.
Можно ли закомментировать код в типовой конфигурации, не снимая её с поддержки?
Нет: правка модуля требует включить возможность изменения. Если нужно изменить поведение без вмешательства в типовой код, используйте расширение конфигурации.
Работают ли комментарии в тексте запроса в консоли запросов?
Да. Язык запросов понимает // до конца строки, так что в консоли можно отключать поля и условия так же, как в модуле.