Форматирование и выравнивание кода 1С в редакторе модуля
Содержание
Чтобы выровнять код прямо в редакторе модуля Конфигуратора, выделите нужные строки и нажмите Tab — блок сдвинется на один уровень вправо, Shift+Tab вернёт его влево. Когда вы пишете новый код, отступы расставляет автоотступ: после Если, Для, Пока, Процедуры новая строка сама получает нужный уровень вложенности.
Единой кнопки «переформатировать весь модуль» в Конфигураторе нет. Поэтому старый, съехавший код выравнивают либо руками (выделение + Tab/Shift+Tab), либо внешними инструментами, либо переносят в 1С:EDT, где форматтер встроен. Ниже — все способы: от штатного автоотступа до проверки оформления в CI/CD, плюс стандарты, которых держится фирма «1С».
Текст касается платформы 1С 8.3 — редактора модуля в Конфигураторе и среды 1С:EDT.
Чем выровнять код прямо в редакторе модуля
Встроенный текстовый редактор Конфигуратора умеет немного, но этого хватает для ежедневной работы.
🔹 Сдвиг блока. Выделите строки, Tab — отступ вправо, Shift+Tab — влево. Работает на любом количестве строк, в том числе на целой процедуре.
🔹 Автоотступ при наборе. Нажали Enter внутри Если … КонецЕсли — курсор встаёт с отступом тела условия. Закрыли КонецЕсли — редактор убирает лишний уровень. Отступ считается по операторным скобкам: Если/Иначе/КонецЕсли, Для/Пока … КонецЦикла, Процедура/Функция … КонецПроцедуры, Попытка/Исключение/КонецПопытки.
🔹 Выделить всё — Ctrl+A. Пригодится, когда нужно разом сдвинуть модуль или скопировать его в другой инструмент.
🔹 Группировка (свёртывание). Процедуры и крупные блоки можно свернуть, чтобы увидеть структуру модуля целиком. Это не меняет отступы, но помогает заметить, где вложенность «поехала».
Если выделить кривой блок и нажать Shift+Tab до упора влево, а затем аккуратно расставить Tab по уровням вложенности, модуль выравнивается вручную за минуту. Для коротких процедур это быстрее, чем искать внешний инструмент.
Важное ограничение: редактор не пересчитывает отступы автоматически для уже написанного кода. Автоотступ срабатывает только в момент набора. Вставили кусок из другого места — он ляжет с чужими отступами, и выравнивать придётся вручную.
Отдельно про «выравнивание в столбик». Иногда под выравниванием понимают не отступы вложенности, а подгонку знаков = в соседних присваиваниях в одну вертикаль. Красиво выглядит, но стандарты «1С» этого не требуют, а любая правка ломает колонку и раздувает diff. Для читаемости достаточно ровных отступов по вложенности и пробелов вокруг операций — на этом и стоит остановиться.
Настройка автоотступа в Конфигураторе
Поведение автоотступа задаётся в Сервис → Параметры. Откройте это окно, найдите раздел настроек текстов (вкладка, отвечающая за тексты и модули) — там собраны параметры редактора.
Ключевые настройки:
- Автоотступ — включить или отключить. По умолчанию включён; выключают его редко, обычно когда мешает при работе с выгруженными текстами.
- Режим отступа — «по предыдущей строке» (новая строка повторяет отступ прошлой) или «по синтаксису» (отступ считается по операторным скобкам). Режим по синтаксису аккуратнее держит вложенность.
- Ширина табуляции — сколько символов занимает один
Tabна экране (обычно 2–4). Это только отображение: в файл пишется один символ табуляции, а не пробелы. - Заменять табуляцию на пробелы — если включить, вместо символа
Tabредактор вставит пробелы. Внутри одной команды договоритесь, табы у вас или пробелы: смесь — главная причина «разъезжающегося» кода у коллег.
Настройки Параметров — локальные, они хранятся у каждого разработчика на его машине. Поэтому один и тот же модуль у двух человек может выглядеть по-разному: у одного таб шириной 4, у другого 2. Договорённость об оформлении живёт не в настройках, а в регламенте команды.
После смены режима автоотступ начнёт работать по-новому только для свежего набора. Чтобы привести старый модуль к новым правилам, его всё равно придётся переформатировать одним из способов ниже.
Выравнивание готового модуля внешними инструментами
Когда модуль большой и съехал целиком, ручной Tab утомителен, а восстановить вложенность на тысяче строк без ошибок почти нереально. Тут помогают внешние средства, которые разбирают текст по операторным скобкам и расставляют отступы сами.
Внешние обработки (.epf). На тематических площадках выкладывают обработки, которые читают текст модуля и расставляют отступы по операторным скобкам. Запускаются они в режиме 1С:Предприятие: Файл → Открыть, выбрать файл
обработки. Обработка возвращает выровненный текст, который вы вставляете обратно в модуль. Подходит, когда EDT под рукой нет, а порядок навести надо.
Надстройки Конфигуратора. Есть сторонние расширения для самого Конфигуратора (например, Снегопат), которые добавляют в редактор команды форматирования и другие удобства. Это внешний продукт, не часть платформы, — ставить его стоит, понимая, что он внедряется в процесс Конфигуратора.
Перенос в 1С:EDT. Самый надёжный штатный форматтер живёт в среде разработки 1С:EDT (на базе Eclipse). Открыли модуль, вызвали форматирование (команда форматирования исходного кода, обычно на Ctrl+Shift+F) — весь файл выравнивается по правилам EDT за один раз.
Tab и Shift+Tab — быстрее любого инструмента.Файл → Открыть в режиме 1С:Предприятие) или надстройку редактора.Ctrl+Shift+F) — он переформатирует весь файл по заданному профилю.Как 1С рекомендует оформлять код
У фирмы «1С» есть система стандартов разработки — свод правил, по которым пишут типовые конфигурации. Форматирования касаются несколько пунктов, и держаться их полезно даже в своих доработках: чужой код потом читается без усилий.
Главное из стандартов оформления:
- Один уровень вложенности — один отступ (табуляция). Тело
Если, цикла, процедуры сдвигается вправо ровно на один шаг. - Операторные скобки — на своих строках.
Если,Иначе,КонецЕслистоят отдельно; условие и тело не сливаются в одну строку. - Один оператор — одна строка. Не нанизывайте несколько присваиваний через
;в строку — так теряется читаемость и отладка усложняется. - Пробелы вокруг знаков операций (
=,+,<) и после запятых в параметрах. Без них код «слипается». - Осмысленные имена в едином регистре: каждое слово с заглавной буквы (
СформироватьДокументРеализации). Транслит и однобуквенные имена — только для счётчиков циклов. - Короткие строки. Длинные выражения переносят так, чтобы не было горизонтальной прокрутки; продолжение сдвигают отступом.
- Группировка по областям. Код модуля делят на области (
#Область … #КонецОбласти), внутри каждой — свой отступ. Это упорядочивает крупные модули: процедуры программного интерфейса, обработчики событий, служебные функции лежат раздельно.
Отступ в 1С считается именно по операторным скобкам, а не по количеству строк. Поэтому важно, чтобы каждая открывающая конструкция (Если, Для, Пока, Попытка) имела свою закрывающую на том же уровне. Если КонецЕсли потерялся или оказался не на своём месте, автоотступ собьётся на всём, что ниже, — и никакой форматтер это не вылечит, пока не восстановлена парность скобок.
Пример выровненного фрагмента по этим правилам:
Процедура ПровестиДокумент(Отказ)
Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
Сообщить("Не указан контрагент");
Отказ = Истина;
Возврат;
КонецЕсли;
Для Каждого СтрокаТовары Из Товары Цикл
СтрокаТовары.Сумма = СтрокаТовары.Количество * СтрокаТовары.Цена;
КонецЦикла;
КонецПроцедуры
Стандарты — это не формальность. Когда весь код команды оформлен одинаково, при слиянии веток в git меньше ложных конфликтов: правки видно по сути, а не по съехавшим пробелам.
Автоматическое форматирование: EDT, VS Code и CI/CD
Если проект ведётся через систему контроля версий, форматирование стоит поставить на поток, чтобы оно не зависело от дисциплины каждого.
1С:EDT. Встроенный форматтер с настраиваемым профилем. Можно включить форматирование при сохранении файла — тогда отступы приводятся к единому виду автоматически, и в репозиторий попадает уже причёсанный код.
VS Code + BSL Language Server. Это открытый проект: расширение для VS Code даёт подсветку, автодополнение, форматирование и десятки диагностик (проверок) кода на встроенном языке 1С. Для работы нужна выгрузка конфигурации в файлы.
Проверка в CI/CD. BSL Language Server умеет работать из командной строки и отдавать отчёт в формате, который понимает SonarQube. Схема такая:
- Конфигурация хранится в git в виде выгруженных текстовых файлов.
- На каждый коммит или pull request сервер сборки запускает анализатор.
- Нарушения оформления и потенциальные ошибки попадают в отчёт; сборку можно «завалить», если правила нарушены.
Хук перед коммитом. Локально ставят pre-commit хук, который прогоняет форматтер по изменённым файлам до коммита. Тогда несформатированный код просто не уходит в репозиторий.
Чтобы всё это работало, конфигурация должна лежать в git не как бинарный .cf, а в виде текстовой выгрузки — отдельный файл на каждый объект и модуль. Выгрузку делают средствами платформы или инструментами синхронизации с репозиторием. После этого отступы и оформление становятся обычными строками, которые видно в diff, а значит, их можно проверять и форматировать автоматически.
Что выбрать — зависит от среды. Пишете в Конфигураторе — остаётесь на ручном выравнивании и внешних обработках. Перешли на 1С:EDT и git — подключайте форматтер и анализатор, дальше оформление держится само.
Частые ошибки при форматировании
Ошибки тут не ломают логику, но отравляют совместную работу и раздувают историю изменений.
❌ Смешаны табы и пробелы. Один писал табами, другой пробелами — код «разъезжается» при разной ширине табуляции. Лечится договорённостью и единой настройкой редактора у всех.
❌ Переформатировали весь модуль «заодно». Правили одну процедуру, а форматтер причесал весь файл — в diff тысячи строк, ревью невозможно, а при слиянии веток лезут конфликты. Форматируйте крупные модули отдельным коммитом, который ничего, кроме отступов, не меняет, и предупредите команду.
❌ Вставили код из Word или браузера. Вместе с текстом тянутся неразрывные пробелы и чужое форматирование; автоотступ их не чинит. Вставляйте через «вставить как обычный текст» и прогоняйте блок через Tab.
❌ Выключенный автоотступ. Иногда его отключают для правки выгруженных текстов и забывают вернуть. Новый код набирается без отступов. Проверьте Сервис → Параметры.
❌ Форматирование вместо осмысленного кода. Ровные отступы не спасут процедуру на 500 строк. Сначала структура — короткие процедуры, понятные имена, — потом уже выравнивание.
❌ Разная ширина табуляции в команде. У одного Tab отображается как 2 символа, у другого как 4. Код формально один и тот же, но визуально вложенность у всех разная, и споры «у меня ровно, у тебя съехало» бесконечны. Зафиксируйте ширину отступа в регламенте и в настройках редактора.
Прежде чем прогнать массовое форматирование по рабочей конфигурации, убедитесь, что код сохранён в системе контроля версий. Автоматический форматтер меняет файл целиком, и откатить неудачный прогон без git будет нечем.
Частые вопросы
Есть ли в Конфигураторе кнопка «отформатировать весь модуль»?
Tab/Shift+Tab, внешними обработками или в 1С:EDT, где форматтер встроен.Отступ лучше делать табами или пробелами?
Почему вставленный код не выравнивается сам?
Tab и Shift+Tab, либо прогоните модуль через форматтер.Можно ли проверять оформление автоматически?
Почему мой ровный код «разъезжается» у коллеги?
Сервис → Параметры) у всех в команде.