К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как писать комментарии в 1С: синтаксис и правила оформления

Как правильно писать комментарии в 1С: синтаксис //, блочные комментарии, стандарты разработки, комментирование кода, процедур и запросов.

Комментарии во встроенном языке 1С — это текст, который платформа игнорирует при выполнении, но который читают разработчики, поддерживающие конфигурацию. Хороший комментарий объясняет не то, что делает строка кода (это видно из самого кода), а зачем принято такое решение, какие есть ограничения и на что обратить внимание при доработке. Плохой комментарий дублирует код словами или устарел и вводит в заблуждение.

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

Синтаксис комментариев во встроенном языке 1С

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

// Комментарий на всю строку

СуммаДокумента = СуммаДокумента + СуммаСтроки; // комментарий в конце строки

Компилятор не поддерживает парные разделители вида / ... /, как в C-подобных языках. Если нужно закомментировать большой фрагмент, каждую строку отмечают символами // — в конфигураторе для этого есть горячие клавиши: выделите блок и нажмите Ctrl+/ (в некоторых раскладках Ctrl+Num+/), чтобы закомментировать или раскомментировать весь блок сразу.

Есть важный нюанс: если внутри строки-комментария стоит символ продолжения или кавычки, они не влияют на компиляцию — комментарий обрывается только переводом строки. Поэтому случайное удаление перевода строки при слиянии может «проглотить» следующую исполняемую строку. Проверяйте такие места после объединения веток хранилища.

1c
// Рассчитываем скидку только для постоянных клиентов,
// временную акцию сюда не включаем (см. задачу № 145)
Если Клиент.Постоянный Тогда
    СуммаСкидки = СуммаДокумента * 0.05;
КонецЕсли;

Комментарии в текстах запросов

Язык запросов 1С имеет собственный синтаксис комментариев, отличный от встроенного языка. Внутри текста запроса используются те же двойные слэши //, но они работают только внутри строки запроса, а не в коде, который этот запрос формирует.

Запрос.Текст =

"ВЫБРАТЬ

| Продажи.Номенклатура КАК Номенклатура,

| СУММА(Продажи.Количество) КАК Количество

|ИЗ

| РегистрНакопления.Продажи КАК Продажи

|ГДЕ

| Продажи.Период МЕЖДУ &Начало И &Конец // период задаёт пользователь

|СГРУППИРОВАТЬ ПО

| Продажи.Номенклатура";

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

Описание процедур и функций по стандарту

Для экспортных процедур и функций принят формализованный блок описания перед объявлением. Конфигуратор распознаёт его и показывает в контекстной подсказке при вызове метода из других модулей. Это главная причина оформлять описания по стандарту, а не в свободной форме.

// Рассчитывает сумму скидки по условиям договора.

//

// Параметры:

// Договор - СправочникСсылка.ДоговорыКонтрагентов - договор покупателя.

// СуммаДокумента - Число - сумма до применения скидки.

//

// Возвращаемое значение:

// Число - сумма скидки.

//

Функция РассчитатьСкидку(Договор, СуммаДокумента) Экспорт

Структура блока: сначала одно-два предложения о назначении метода, затем секция «Параметры:» с типами и смыслом каждого параметра, затем «Возвращаемое значение:» для функций. Для процедур секция возвращаемого значения не нужна. Типы указывайте полностью, включая составные, если параметр может принимать несколько видов ссылок.

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

Как оформить описание функции
  1. 1
    Перед строкой «Функция ... Экспорт» добавьте строку с кратким назначением в форме инфинитива: «Рассчитывает...», «Возвращает...».
  2. 2
    Добавьте секцию «Параметры:» и перечислите каждый параметр с типом и пояснением.
  3. 3
    Добавьте секцию «Возвращаемое значение:» с типом и смыслом результата.
  4. 4
    Откройте другой модуль, начните вводить имя метода и убедитесь, что описание появилось в контекстной подсказке.

Комментарии-заглушки и временное отключение кода

Во время разработки часто требуется временно отключить фрагмент кода. Самый безопасный способ — закомментировать блок через Ctrl+/. Альтернатива — обернуть код в инструкции препроцессора #Если Ложь Тогда ... #КонецЕсли, но этот приём хуже читается и легко забывается в конфигурации.

Любой закомментированный код, попадающий в рабочую базу, должен содержать пояснение: почему он отключён, когда и при каких условиях его можно вернуть или удалить. Без пояснения такие «мёртвые» фрагменты копятся годами, и никто не решается их удалить, опасаясь скрытых зависимостей.

Для пометок «доделать позже» используйте единообразные метки, например // TODO: с текстом задачи. Их легко найти глобальным поиском по модулю или по всей конфигурации (Ctrl+Shift+F), а при наличии EDT — через встроенный список задач.

Типичные ошибки
01
Закомментированный код без пояснения — через месяц никто не помнит, зачем он оставлен, и боится удалить.
02
Комментарий противоречит коду после доработки — читающий доверяет тексту и вносит ошибку.
03
Описание параметра «Документ - Документ - документ» не несёт информации: нужен тип и роль параметра.
04
Комментирование очевидного («// увеличиваем счётчик на 1») засоряет модуль и отвлекает от важных пояснений.

Что стоит и чего не стоит комментировать

Комментируйте причины решений, неочевидные ограничения и обходные пути: почему выбран именно такой алгоритм, какая особенность учёта заставила отказаться от типового подхода, на какие данные опирается условие. Также обязательны пояснения к «магическим» числам и датам — если в коде стоит константа, должно быть ясно, откуда она взялась.

Не комментируйте то, что очевидно из имён переменных и методов. Строка НайденнаяСтрока = ТаблицаТоваров.Найти(Артикул, "Артикул"); // ищем строку по артикулу не добавляет информации. Если код настолько запутан, что требует построчных пояснений, правильнее переименовать переменные и разбить метод, а не закрывать проблему комментариями.

При доработке типовых конфигураций помечайте вставки и изменения согласованным маркером, например // Доработка: начало и // Доработка: конец с указанием причины. Это резко упрощает обновление: при сравнении и объединении сразу видно, какие фрагменты — ваши, и их не «затрёт» типовой код без внимания.

Маршрут решения

Как выбрать форму комментария

Нужно пояснить одну строку или короткое решениеИспользуйте // в конце строки или отдельной строкой перед кодом.
Описывается экспортная процедура или функцияОформите стандартный блок с секциями «Параметры:» и «Возвращаемое значение:».
Требуется временно отключить фрагментВыделите блок и нажмите Ctrl+/, добавьте строку с причиной отключения.
Меняется типовой код конфигурацииОбрамите изменение маркерами начала и конца доработки с пояснением.

Проверка качества комментариев при ревью

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

Автоматизированные проверки (например, расширенная проверка конфигурации в EDT) умеют находить экспортные методы без описания и ряд других нарушений оформления. Включите такие проверки в рабочий процесс, чтобы стандарт поддерживался инструментом, а не памятью разработчиков.

Контрольные точки

Как проверить результат

Контекстная подсказка экспортного метода
Норма

При вызове метода показывается назначение, параметры и возвращаемое значение

Тревожный признак

Подсказка пустая или показывает только сигнатуру

Закомментированные блоки
Норма

У каждого есть причина отключения и, при необходимости, ссылка на задачу

Тревожный признак

Мёртвый код без пояснений старше одного релиза

Соответствие комментария коду
Норма

Текст описывает текущее поведение после последних правок

Тревожный признак

Комментарий описывает старую логику и противоречит коду

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

Есть ли в 1С многострочный комментарий вида / /?

Нет, парных разделителей во встроенном языке нет. Многострочный текст комментируют построчно символами //; ускоряет это сочетание Ctrl+/ на выделенном блоке в конфигураторе.

Влияют ли комментарии на производительность кода?

Нет. Комментарии отбрасываются на этапе компиляции модуля и не попадают в исполняемый код, поэтому их количество не влияет на скорость выполнения.

Как закомментировать большой кусок кода быстро?

Выделите нужные строки в модуле и нажмите Ctrl+/ — конфигуратор проставит // в начале каждой строки. Повторное нажатие снимает комментарий. Не забудьте добавить строку с причиной отключения.

Нужно ли комментировать неэкспортные (локальные) процедуры?

Желательно, если логика нетривиальна. Полный стандартный блок с типами параметров обязателен для экспортных методов, а для локальных достаточно одной-двух строк о назначении, если оно не очевидно из имени.

Работают ли комментарии в макетах и текстах запросов СКД?

В текстах запросов (в том числе в СКД) работают комментарии // внутри текста запроса. В табличных и текстовых макетах понятия комментария нет — пояснения там хранят как обычные служебные строки вне областей вывода.

Итог

Что важно запомнить

Комментарий в 1С — это // до конца строки, отдельный синтаксис действует внутри текстов запросов. Экспортные методы описывайте стандартным блоком с параметрами и возвращаемым значением — он попадает в подсказку. Комментируйте причины и ограничения, а не очевидные действия, и всегда поясняйте закомментированный код.