Чистый код в 1С: форматирование, стандарты и инструменты
Содержание
Чтобы выровнять отступы в модуле, выделите нужный фрагмент и выполните Текст → Блок → Форматировать. Команда расставит табуляцию по уровням вложенности Если, Цикл, Попытка и процедур — ровно то, что чаще всего и называют «отформатировать код».
Одно уточнение сразу. В Конфигураторе нет кнопки, которая переписывает код «под один стиль», как Prettier в вебе или автоформат в современных IDE. Встроенное форматирование делает одну вещь — приводит в порядок отступы. Переносы длинных строк, пробелы вокруг операторов, именование переменных остаются на вас. Поэтому «красивый код в 1С» складывается из трёх частей: отступы Конфигуратора, настройки редактора и внешние инструменты вроде 1C:EDT и BSL Language Server. Разберём всё по порядку — от быстрой команды до проверки стиля в CI.
Форматируем блок кода прямо в Конфигураторе
Основной рабочий сценарий — выделить код и выровнять отступы.
- Откройте модуль в редакторе (модуль объекта, формы, общий модуль).
- Выделите фрагмент или весь текст (
Ctrl+A). - Выполните
Текст → Блок → Форматировать.
Табуляция выстроится по вложенности: тело Если … КонецЕсли, Для … КонецЦикла, Попытка … Исключение … КонецПопытки и процедур сдвинется на нужное число отступов.
Рядом в том же подменю Текст → Блок есть ещё две полезные команды:
- 📐 Увеличить / уменьшить отступ —
TabиShift+Tabна выделенном блоке. Сдвигают выбранные строки целиком, не ломая вложенность. - 💬 Добавить / удалить комментарий —
Ctrl + Num /закомментирует выделенные строки (поставит//),Ctrl + Shift + Num /раскомментирует. Удобно, когда надо временно отключить кусок логики.
Наглядно это выглядит так. Вставленный фрагмент с «уехавшими» отступами:
Для Каждого Строка Из ТаблицаТоваров Цикл
Если Строка.Количество > 0 Тогда
Сумма = Сумма + Строка.Количество * Строка.Цена;
КонецЕсли;
КонецЦикла;
После Текст → Блок → Форматировать:
Для Каждого Строка Из ТаблицаТоваров Цикл
Если Строка.Количество > 0 Тогда
Сумма = Сумма + Строка.Количество * Строка.Цена;
КонецЕсли;
КонецЦикла;
Логика та же — изменились только отступы, зато структура цикла и условия видна с первого взгляда.
Автоотступ работает и при наборе: когда вы жмёте Enter внутри Если или Цикл, новая строка получает отступ автоматически. Команда Форматировать нужна в основном для чужого кода, вставленного из буфера или из внешней обработки, где отступы «уехали».
Если после форматирования блок выглядит странно — почти всегда причина в незакрытом операторе выше по тексту. Проверьте парность Если/КонецЕсли и Цикл/КонецЦикла: именно по ним редактор считает уровень вложенности.
Настройка отступов, табуляции и переносов
Поведение редактора настраивается один раз на всю работу: Сервис → Параметры → Тексты модулей. Здесь живут настройки, которые влияют на то, как выглядит и форматируется ваш код.
Что имеет смысл проверить:
- Ширина табуляции — сколько пробелов «рисует» один
Tab(обычно 4). На само хранение это не влияет, меняется только отображение. - Использовать табуляцию / заменять на пробелы — ключевая настройка командной работы. Стандарт 1С — отступ табуляцией, по одному табу на уровень. Если половина команды пишет пробелами, а половина табами, в хранилище будут бесконечные «различия» на пустом месте.
- Автоотступ — автоматический отступ новой строки по образцу предыдущей.
- Показывать пробелы — подсветка невидимых символов. Помогает увидеть смешанные табы и пробелы.
Договоритесь о табуляции на старте проекта. Смена «табы ↔ пробелы» в уже написанном модуле переоформит каждую строку — и история в хранилище конфигурации покажет, что файл изменён целиком, хотя логика та же. Сравнивать версии после такого почти невозможно.
Переносы длинных строк Конфигуратор сам не делает — это ручная работа. Общее правило: если выражение не помещается на экран, переносите по операторам, а продолжение сдвигайте на отступ вправо, чтобы было видно — это одна строка кода:
РезультатЗапроса = Запрос.Выполнить()
.Выбрать()
.Следующий();
ТекстСообщения = СтрШаблон(
"Документ %1 от %2 проведён на сумму %3",
Документ.Номер,
Формат(Документ.Дата, "ДЛФ=D"),
Формат(Документ.СуммаДокумента, "ЧГ=0"));
Правила именования переменных и объектов
Отступы — это половина читаемости. Вторая половина — имена. Стандарты разработки 1С здесь довольно строгие, и их стоит держать в голове, потому что ни одна команда «Форматировать» их не исправит.
Базовые правила:
- 🔤 Имена — на русском, в «ВерблюжьемРегистре». Каждое слово с заглавной буквы, без разделителей:
СуммаДокумента,СформироватьПечатнуюФорму,ТаблицаНоменклатуры. Это стиль платформенных объектов, и собственный код должен ему соответствовать. - 📛 Имя отражает смысл, а не тип.
Контрагентлучше, чемСпр1;ВыбранныеСтрокилучше, чеммМассив. Исключение — короткие счётчики циклов (Индекс,Сч). - 🧩 Процедуры и функции — тоже в «ВерблюжьемРегистре», глаголом:
ЗаполнитьТаблицу(),ПолучитьКурсВалюты(). Функция возвращает значение — имя отвечает на вопрос «что получаем». - 📝 Экспортные процедуры снабжают комментарием-описанием над объявлением: что делает, какие параметры принимает, что возвращает. Это основа читаемости общих модулей.
Ключевые слова (Если, Процедура, Возврат) можно писать по-русски или по-английски — платформа понимает оба варианта. Но в одном проекте выберите что-то одно: смешение Если и If в соседних строках выглядит неряшливо.
Единый регистр ключевых слов и встроенных функций тоже помогает. В типовых конфигурациях 1С принят русский язык и написание функций «как в синтакс-помощнике»: НСтр, СтрНайти, ТекущаяДата.
Отдельно про структуру модуля. Процедуры и функции группируют по областям — директивами #Область ИмяОбласти и #КонецОбласти. В редакторе область сворачивается, и большой модуль читается как оглавление. В типовых конфигурациях приняты осмысленные имена областей — например, программный интерфейс, обработчики событий, служебные процедуры и функции. Разложить код по областям так же важно для читаемости, как ровные отступы.
Шаблоны текста: ввод кода без лишних нажатий
Чтобы код был единообразным, его удобно не печатать заново, а вставлять из шаблонов. В Конфигураторе это механизм шаблонов текста: Сервис → Шаблоны текста.
Вы задаёте короткое сокращение и полный текст, который оно разворачивает. Классический пример — заготовка процедуры:
// <Описание процедуры>
//
// Параметры:
// <Параметр> - <Тип> - <описание>
//
Процедура <ИмяПроцедуры>()
|
КонецПроцедуры
Набираете сокращение, нажимаете клавишу разворота (по умолчанию Ctrl+Q или через автоподстановку) — и получаете готовый каркас с правильными отступами и комментарием. Это экономит время и держит стиль в рамках: все процедуры начинаются одинаково.
Шаблоны полезны для повторяющихся конструкций: обход результата запроса, стандартный блок Попытка … Исключение с записью в журнал регистрации, заготовка обработчика события формы. Один раз настроили — вся команда пишет в одном ключе.
Внешние инструменты: 1C:EDT, BSL Language Server, Снегопат
Когда встроенного форматирования мало, подключают внешние средства. Они умеют то, чего Конфигуратор не делает: переформатировать код целиком, проверять стиль по правилам, подсвечивать проблемы на лету.
1C:EDT (среда на базе Eclipse). Полноценная среда разработки с настоящим автоформатированием. Выделяете код или весь файл, жмёте Ctrl+Shift+F — и EDT переоформляет его по заданным правилам: отступы, пробелы вокруг операторов, переносы. Правила настраиваются в параметрах среды (раздел стиля кода для языка 1С). Если проект ведётся в EDT, это основной способ держать код в форме.
BSL Language Server. Открытый языковой сервер для встроенного языка 1С. Чаще всего его ставят как расширение Language 1C (BSL) в редактор VS Code. Он даёт:
- форматирование документа (
Shift+Alt+Fв VS Code); - десятки диагностик — от «метод не используется» до нарушений стиля и потенциальных ошибок;
- подсказки и переход к объявлению.
Для работы с BSL Language Server код выгружают в файлы .bsl — через 1C:EDT или через выгрузку конфигурации в файлы из Конфигуратора (Конфигурация → Выгрузить конфигурацию в файлы).
Снегопат. Надстройка над Конфигуратором, добавляющая скрипты и дополнительные команды поверх штатного редактора. Исторически им пользовались ради расширенных возможностей редактирования. Инструмент старый — перед внедрением проверьте совместимость с вашей версией платформы.
Коротко, что выбрать под задачу:
| Инструмент | Что умеет | Когда брать |
|---|---|---|
| Конфигуратор | Выравнивание отступов, комментирование | Быстрая правка, работа без дополнительного ПО |
| 1C:EDT | Полный автоформат, настройка стиля, Git | Основная среда разработки, командный проект |
| BSL Language Server (VS Code) | Формат документа + диагностики стиля | Проверка кода, лёгкий редактор, подготовка к CI |
| Снегопат | Скрипты поверх Конфигуратора | Нужны расширения штатного редактора |
Эти средства не взаимоисключающие: отступы можно держать в Конфигураторе, а раз в спринт прогонять код диагностиками BSL Language Server и чинить замечания.
Внешние инструменты меняют оформление, но не логику. После массового автоформата обязательно сверьте результат с хранилищем и прогоните тесты: редкие случаи (многострочные строковые литералы, хитрые переносы) форматтер может переставить не так, как вы ожидали.
Проверка стиля кода в CI/CD
Ручная дисциплина работает до тех пор, пока проект маленький. Дальше стиль проверяют автоматически — на каждый коммит или сборку.
Как это обычно устроено:
- Выгрузка в Git. Конфигурация или проект EDT хранится в Git. Из Конфигуратора с хранилищем код синхронизируют инструментами выгрузки (например,
gitsync), EDT работает с Git напрямую. - Анализ BSL Language Server. В пайплайне запускается консольный анализ: сервер проходит по файлам
.bsl, собирает диагностики и формирует отчёт. Нарушения стиля и ошибки видны прямо в сборке. - Качество через SonarQube. Отчёт BSL Language Server передают в SonarQube (через соответствующий плагин для языка 1С). Там настраивается «ворота качества»: если новых замечаний больше порога — сборка падает.
- Pre-commit хуки. Самый ранний рубеж — проверка до коммита. Хук прогоняет анализ по изменённым файлам и не даёт закоммитить код с грубыми нарушениями.
Такой конвейер не форматирует код за разработчика — он не пускает в репозиторий то, что оформлено плохо. Форматирование остаётся за автором (EDT или редактор с BSL), а CI следит, чтобы правило соблюдалось.
Частые ошибки при форматировании
Несколько ситуаций, которые регулярно портят код и ломают сравнение версий.
- ❌ Смешение табов и пробелов. Самая частая беда командной разработки. Внешне код ровный, но в хранилище — постоянные ложные различия. Лечится единой настройкой
Сервис → Параметры → Тексты модулейу всех и включённым показом пробелов. - ❌ Массовая переформатировка «заодно». Правите одну процедуру, а автоформат трогает весь модуль. В коммит попадают сотни строк, и ревью становится бессмысленным. Форматируйте только то, что меняете, либо выносите глобальный переформат в отдельный коммит с понятным комментарием.
- ❌ Отступ сломался после вставки. Код из буфера или из внешней обработки приходит с чужими отступами. Не оставляйте как есть — выделите и выполните
Форматировать. - ❌ Транслитерация и латиница в именах.
Summa,tekDoc,arrвыбиваются из стиля платформы. Держитесь русских имён в «ВерблюжьемРегистре». - ❌ Форматирование вместо рефакторинга. Ровные отступы не спасут процедуру на 500 строк. Если код нечитаем структурно — его надо разбивать на процедуры, а не только выравнивать.
Частые вопросы
Есть ли горячая клавиша, чтобы отформатировать весь модуль сразу?
Ctrl+A и выполните Текст → Блок → Форматировать. В 1C:EDT и в VS Code с расширением BSL автоформат документа вызывается Ctrl+Shift+F и Shift+Alt+F соответственно.Форматирование меняет логику кода?
Табуляция или пробелы — что правильно в 1С?
Почему после форматирования отступы «съехали»?
КонецЕсли, КонецЦикла или КонецПроцедуры. Редактор считает вложенность по парным ключевым словам. Найдите непарный оператор — отступы встанут на место.