Комментирование блока кода в Конфигураторе и EDT
Содержание
Чтобы закомментировать много строк в 1С, выделите их в модуле и нажмите Ctrl + / на цифровом блоке клавиатуры. Снять комментарий — Ctrl + Shift + / на том же блоке. Обе команды есть в меню Конфигуратора Текст → Блок: «Добавить комментарий» и «Удалить комментарий».
Частое заблуждение — искать в языке 1С многострочный комментарий вроде /* ... */. Его нет. Комментарий в 1С только однострочный, он начинается с // и длится до конца строки. Поэтому «закомментировать блок» значит поставить // в начало каждой выделенной строки — именно это и делают горячие клавиши
.
Горячие клавиши для комментирования блока в Конфигураторе
Порядок действий в модуле объекта, общем модуле или модуле формы одинаковый:
- Выделите нужные строки мышью или клавишами
Shift + ↓. Достаточно задеть хотя бы часть каждой строки — комментарий ставится на всю строку целиком. - Нажмите
Ctrl + /(клавиша «/» справа, на цифровом блоке). - Чтобы вернуть код, выделите те же строки и нажмите
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 /, слеши встанут перед чертой |, то есть станут комментарием встроенного языка, а не запроса. С промежуточными строками это обычно проходит, но есть ловушка:
Последняя строка запроса содержит закрывающую кавычку и ;. Закомментируете её вместе с блоком — литерал не закроется, и модуль перестанет компилироваться. Конец строкового литерала комментируйте только вручную и с проверкой синтаксиса.
Висячая запятая
Самая частая ошибка при отключении полей — запятая. Если закомментировать последнее поле в списке ВЫБРАТЬ, у предпоследнего остаётся запятая перед ИЗ, и запрос падает с синтаксической ошибкой.
Два приёма, которые снимают проблему:
- ✅ переносите запятую в начало строки отключаемого поля (
//, Поле КАК Поле), как в примере выше; - ✅ при отключении условия в
ГДЕследите за связкамиИ/ИЛИ: комментируйте условие вместе со своимИ.
Конструктор запросов и консоль: где комментарии исчезают
Конструктор запроса не хранит текст в исходном виде. Он разбирает запрос, а при нажатии «ОК» собирает текст заново. Комментарии внутри запроса при этом пропадают — вместе с отключёнными полями и условиями.
Что из этого следует на практике:
- Отключили поле комментарием, а потом открыли запрос конструктором — после «ОК» закомментированное поле удалится насовсем.
- Если нужно сохранить отключённый вариант, скопируйте текст запроса в отдельный комментарий модуля или в заметку до открытия конструктора.
- Для экспериментов удобнее консоль запросов (обработка из комплекта поставки или любая проверенная): вставили текст, закомментировали строку через
//, выполнили, сравнили результат.
Перед правкой конструктором большого запроса сравните текст до и после через Конфигурация → Сравнить, объединить или просто держите копию в буфере. Конструктор может изменить не только комментарии, но и форматирование, псевдонимы и порядок полей.
Модуль управляемой формы: директивы и обработчики
В модуле формы у каждой процедуры есть директива компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста и другие. Комментируя процедуру целиком, захватывайте и её директиву.
//&НаСервере
//Процедура ЗаполнитьТаблицуНаСервере()
// Объект.Товары.Очистить();
//КонецПроцедуры
Если оставить директиву открытой, она «приклеится» к следующей процедуре модуля. В лучшем случае модуль не скомпилируется, в худшем — следующая процедура молча сменит контекст исполнения.
Обработчики событий формы
Процедура может быть назначена обработчиком: события формы (ПриОткрытии), элемента (ПриИзменении) или действием команды. Закомментировали её — в свойствах формы ссылка на обработчик осталась. Ошибка всплывёт, когда событие сработает у пользователя.
Перед публикацией такой правки:
- Откройте форму в редакторе и найдите элемент или команду, где указан обработчик.
- Очистите поле обработчика в палитре свойств или верните процедуру.
- Запустите
Конфигурация → Проверка конфигурациии включите в расширенной проверке пункт о существовании назначенных обработчиков.
Клиент и сервер вперемешку
Частый сценарий: клиентская процедура вызывает серверную. Закомментировали серверную — клиентская перестала компилироваться, потому что вызывает несуществующий метод. Комментируйте парой: вызов и вызываемую процедуру, либо оставьте у серверной процедуры заглушку с пустым телом.
Отладка без лишних комментариев
Многие комментируют код, чтобы «посмотреть, что будет без этого куска». Отладчик часто позволяет обойтись без правки модуля.
| Задача | Чем заменить комментирование |
|---|---|
| Понять, доходит ли выполнение до строки | Точка останова: F9 на строке |
| Остановиться только на нужной записи | Точка останова с условием (через контекстное меню точки) |
| Проверить значение без лишнего кода | Shift + F9 — «Вычислить выражение» |
| Временно не останавливаться | Отключить точку останова, а не удалять её |
| Пройти код по шагам | F10 — шаг с обходом, F11 — шаг с заходом |
На закомментированной строке точку останова поставить нельзя: для отладчика такой строки как кода не существует. Если отладчик «проскакивает» нужное место, первым делом проверьте, не стоит ли перед строкой //.
Условная компиляция вместо комментария
Инструкции препроцессора #Если ... Тогда ... #КонецЕсли исключают код из компиляции в определённом контексте. Типичный случай — серверный код в общем модуле, который не должен попасть на клиент:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
// код, который выполняется только на сервере
#КонецЕсли
Иногда препроцессор используют, чтобы «выключить» большой фрагмент, не трогая каждую строку. Но это маскировка: код выглядит рабочим, его подсвечивает редактор, и через полгода никто не помнит, почему он не выполняется. Для временного отключения честнее //, для постоянного — удаление.
Области вместо комментирования
Если код мешает читать модуль, но нужен, его не обязательно комментировать. Оберните фрагмент в #Область ИмяОбласти ... #КонецОбласти — редактор позволит свернуть его в одну строку, а код продолжит работать.
Порядок в модуле: что делать с закомментированным кодом
Закомментированный фрагмент — временная мера. Оставленный в рабочей конфигурации, он мешает обновлениям: при сравнении и объединении с новым релизом типовой конфигурации такие блоки дают лишние различия.
Хорошие привычки:
- 🧹 удаляйте отключённый код, как только изменение проверено. История изменений хранится в хранилище конфигурации или в Git, если вы работаете в EDT;
- 🏷️ если блок должен пожить, подпишите его: кто отключил, когда и почему —
// Отключено 07.10, Иванов: задвоение движений по 41 счёту, задача 1234; - 🔎 ищите забытые фрагменты глобальным поиском по конфигурации (
Правка → Глобальный поиск) по своим меткам или по характерным строкам вроде//Процедура; - 🧩 в типовой конфигурации на поддержке не комментируйте типовой код без нужды. Изменение лучше вынести в расширение: там можно заменить процедуру своей, не трогая исходник.
Правка модулей в рабочей базе — это изменение конфигурации. Перед сохранением в базу сделайте выгрузку .dt или убедитесь, что изменения есть в хранилище, а применяйте в регламентное окно: обновление конфигурации базы данных может потребовать завершить сеансы пользователей.
Что пойдёт не так и как быстро найти причину
&НаКлиенте/&НаСервере над закомментированной процедурой. Нажмите Ctrl + F7 (проверка синтаксиса) — курсор встанет на проблемное место.ИЗ или «осиротевшее» И в условии ГДЕ. Перенесите запятую в начало отключаемой строки.Текст → Блок.Частые вопросы
Можно ли в 1С закомментировать текст между строк, как /* */ в других языках?
//. Для блока ставьте // в каждую строку горячими клавишами.Влияют ли комментарии на скорость работы базы?
Почему после «Удалить комментарий» в строке остались слеши?
////. Команда снимает одну пару за раз — повторите её.Можно ли закомментировать код в типовой конфигурации, не снимая её с поддержки?
Работают ли комментарии в тексте запроса в консоли запросов?
// до конца строки, так что в консоли можно отключать поля и условия так же, как в модуле.