Форматирование модуля в Конфигураторе: отступы, области и стандарты оформления
Содержание
Чтобы выровнять код в 1С 8.3, выделите нужный фрагмент в модуле и нажмите Alt+Shift+F. Конфигуратор расставит отступы по вложенности: тело процедуры, условия Если, циклов и блока Попытка сдвинется на один шаг табуляции. Весь модуль форматируется так же: Ctrl+A, затем Alt+Shift+F.
Эта команда правит только отступы в начале строк. Пробелы внутри выражений, переносы длинных строк и порядок процедур она не трогает. Их приводят в порядок вручную, по правилам оформления, или внешними инструментами проверки.
Горячие клавиши Конфигуратора для выравнивания и правки кода
Все команды работы с блоком текста собраны в меню Текст → Блок, которое появляется, когда открыт модуль. Горячие клавиши
дублируют самые частые из них.
| Действие | Клавиши | Что происходит |
|---|---|---|
| Форматировать блок | Alt+Shift+F | Отступы расставляются по синтаксической вложенности |
| Сдвинуть блок вправо | Tab (при выделении) | Каждая строка выделения получает ещё один отступ |
| Сдвинуть блок влево | Shift+Tab | Один отступ убирается у каждой строки |
| Закомментировать | Ctrl+Num / | В начало каждой строки добавляется // |
| Раскомментировать | Ctrl+Shift+Num / | Символы // в начале строк удаляются |
| Свернуть группировку | Ctrl+Num - | Сворачивается текущая процедура, условие или область |
| Развернуть группировку | Ctrl+Num + | Текущая группировка раскрывается |
| Свернуть / развернуть все | Ctrl+Shift+Num - / Ctrl+Shift+Num + | То же для всего модуля |
| Отменить | Ctrl+Z | Возврат, если форматирование дало не тот результат |
Num — клавиши цифрового блока. На ноутбуке без него команды комментирования и сворачивания удобнее вызывать из меню Текст → Блок или через контекстное меню правой кнопкой мыши.
Форматируйте не весь модуль, а изменённую процедуру. При помещении в хранилище и сравнении версий будет видно только то, что вы действительно поменяли, а не сотни строк со сдвинутыми отступами.
Как работает Alt+Shift+F
Команда смотрит на ключевые слова и считает уровень вложенности:
- 🔹
Процедура/Функцияоткрывают уровень,КонецПроцедуры/КонецФункциизакрывают; - 🔹
Если,Для,Для каждого,Пока,Попыткаоткрывают уровень; - 🔹
ИначеЕсли,Иначе,Исключениевозвращаются на уровень родителя, а следующие за ними строки снова уходят вправо; - 🔹
КонецЕсли,КонецЦикла,КонецПопыткизакрывают уровень.
Если отступы после форматирования «поехали» и где-то ниже по модулю код сдвинут не туда, ищите незакрытую конструкцию: забытый КонецЕсли или лишний КонецЦикла. Синтаксическая проверка (Ctrl+F7) покажет строку с ошибкой.
Настройка отступов и табуляции в параметрах редактора
Параметры редактора модулей открываются через Сервис → Параметры, вкладка «Модули», подраздел редактирования. Там задаются ширина табуляции и поведение отступов при наборе.
Что стоит проверить:
- Ширина табуляции. По умолчанию 4 позиции. Это влияет только на отображение: в файле модуля хранится символ табуляции, а не четыре пробела.
- Автоматический отступ. При нажатии
Enterновая строка начинается с того же отступа, что и предыдущая. Без этой опции каждую строку приходится сдвигать вручную. - Замена табуляции пробелами. Если такая опция включена, отключите её. В типовых конфигурациях отступы делаются табуляцией, и смесь пробелов с табами ломает вид кода у коллег с другой шириной табуляции.
Настройки редактора хранятся у конкретного пользователя на конкретном компьютере. Если в команде у кого-то отступы пробелами, договоритесь о едином правиле, иначе каждое редактирование чужой процедуры будет давать «шумные» изменения в хранилище.
Шрифт модуля тоже настраивается в параметрах. Для выравнивания по столбцам нужен моноширинный шрифт, например Courier New или Consolas: в пропорциональном шрифте колонки комментариев и параметров никогда не встанут ровно.
Как выравнивать условия, циклы, запросы и длинные выражения
Автоформатирование решает вопрос вложенности. Остальное делается руками, и здесь есть устоявшиеся приёмы.
Условия и циклы
Тело каждой конструкции — на один отступ правее её заголовка. Пустая строка отделяет логические шаги внутри процедуры, но не ставится сразу после Тогда или перед КонецЕсли.
Процедура ЗаполнитьТовары(Документ, ДанныеЗаказа) Экспорт
Для Каждого СтрокаЗаказа Из ДанныеЗаказа Цикл
Если СтрокаЗаказа.Количество = 0 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = Документ.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаЗаказа);
КонецЦикла;
КонецПроцедуры
Длинные условия и выражения
Длинное условие разбивают на строки так, чтобы логическая операция стояла в начале продолжения. Так сразу видно, что строка — часть предыдущего выражения:
Если ЗначениеЗаполнено(Контрагент)
И Контрагент.ЭтоГруппа = Ложь
И НЕ Контрагент.ПометкаУдаления Тогда
ОбработатьКонтрагента(Контрагент);
КонецЕсли;
Если условий больше трёх-четырёх, читаемее вынести их в переменную или отдельную функцию с говорящим именем, чем выравнивать пять строк продолжения.
Вызовы с множеством параметров
Параметры переносят по одному на строку, со сдвигом на отступ относительно начала вызова:
Результат = ОбщегоНазначенияСервер.СформироватьОтчет(
НастройкиОтчета,
ДатаНачала,
ДатаОкончания,
Истина);
Тексты запросов
Текст запроса — это строка, и Alt+Shift+F его содержимое не выравнивает. Многострочная строка в 1С оформляется так: первая строка открывается кавычкой, каждая следующая начинается с символа |.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| СУММА(Товары.Количество) КАК Количество
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура";
Самый быстрый способ получить аккуратный текст — открыть его в конструкторе запроса (правая кнопка мыши внутри текста запроса → конструктор) и нажать «ОК». Конструктор пересоберёт текст в своём стандартном виде: ключевые слова прописными буквами, поля с отступом табуляцией, каждое поле на своей строке.
Конструктор может переставить поля и убрать ваши комментарии внутри текста запроса. Если комментарии нужны, сохраните их отдельно или пишите над присваиванием Запрос.Текст.
Символ | у строк, скопированных из внешнего редактора, можно расставить не вручную: в меню Текст → Блок есть команды добавления и удаления переноса строки для выделенного фрагмента.
Области и структура модуля
Отступы делают читаемой процедуру, а области — весь модуль. Область задаётся инструкциями препроцессора:
#Область ПрограммныйИнтерфейс
Функция ОстатокТовара(Номенклатура, Склад) Экспорт
// ...
КонецФункции
#КонецОбласти
Область сворачивается так же, как процедура, через Ctrl+Num -. Инструкции #Область и #КонецОбласти пишут без отступа, с первой позиции строки, а имя области — одним словом без пробелов.
Принятый порядок областей
В типовых конфигурациях на базе БСП используются стандартные имена областей. Удобно придерживаться их и в своих доработках:
| Тип модуля | Области по порядку |
|---|---|
| Общий модуль, модуль менеджера | ПрограммныйИнтерфейс, СлужебныйПрограммныйИнтерфейс, СлужебныеПроцедурыИФункции |
| Модуль объекта | ОписаниеПеременных, ПрограммныйИнтерфейс, ОбработчикиСобытий, СлужебныйПрограммныйИнтерфейс, СлужебныеПроцедурыИФункции |
| Модуль формы | ОписаниеПеременных, ОбработчикиСобытийФормы, ОбработчикиСобытийЭлементовШапкиФормы, ОбработчикиКомандФормы, СлужебныеПроцедурыИФункции |
Пустые области из шаблона удалять не обязательно, но и лепить в модуль все возможные области ради порядка тоже незачем. Для табличных частей формы добавляют область обработчиков событий элементов конкретной таблицы, с её именем в названии области.
Навигация по большому модулю
В модуле на тысячи строк выравнивание теряет смысл, если по нему нельзя быстро перемещаться:
- 📌
Ctrl+G— переход к строке по номеру, удобно при разборе ошибки из журнала регистрации; - 📌 список процедур модуля открывается кнопкой на панели модуля и позволяет прыгнуть к нужной процедуре по имени;
- 📌 сворачивание всех группировок
Ctrl+Shift+Num -превращает модуль в оглавление из процедур и областей.
Правила оформления кода: что принято в типовых конфигурациях
У фирмы 1С есть система стандартов и методик разработки, по которым написаны типовые конфигурации. Требования к оформлению текстов модулей в ней сводятся к нескольким понятным правилам.
| Правило | Как выглядит на практике |
|---|---|
| Отступы — табуляцией | Один уровень вложенности = один символ табуляции |
| Длина строки до 120 символов | Длинные выражения переносятся, операция — в начале новой строки |
| Одна инструкция на строке | Не А = 1; Б = 2; в одной строке |
| Пробелы вокруг операций | Сумма = Цена * Количество, а не Сумма=Цена*Количество |
| Пробел после запятой | Функция(Параметр1, Параметр2) |
| Ключевые слова по-русски, с заглавной | Если, КонецЕсли, Истина, а не если или ИСТИНА |
| Комментарий к экспортной процедуре | Описание назначения, параметров и возвращаемого значения над заголовком |
Ключевые слова в коде пишут в «верблюжьей» форме (КонецЕсли, ИначеЕсли), а в текстах запросов — прописными (ВЫБРАТЬ, ГДЕ). Смешивать английский и русский синтаксис в одном модуле не принято, даже если платформа это допускает.
Комментарии
Комментарий ставят над кодом, к которому он относится, с тем же отступом. Хвостовые комментарии в конце строки допустимы для коротких пояснений, но их выравнивание по одной колонке разваливается при первой правке соседней строки.
Закомментированный старый код в модуле не держат: история изменений есть в хранилище конфигурации или в Git. Для доработок типовой конфигурации принято помечать начало и конец своего фрагмента комментарием с автором, датой и номером задачи — это облегчает следующее обновление.
Внешние инструменты проверки и автоформатирования
Конфигуратор умеет только расставлять отступы. Остальные правила проверяют внешние средства.
1C:Enterprise Development Tools
EDT — среда разработки на базе Eclipse, выпускаемая фирмой 1С. В ней форматирование богаче, чем в Конфигураторе:
- 🛠
Ctrl+Shift+F— форматирование модуля или выделенного фрагмента по настроенным правилам; - 🛠 настройки форматера задаются в параметрах среды и могут храниться в проекте, тогда у всей команды код выглядит одинаково.
EDT подсвечивает часть нарушений стандартов прямо в редакторе, а проект хранится в Git в виде файлов, что делает «шумные» правки форматирования особенно заметными в истории.
BSL Language Server и SonarQube
BSL Language Server — открытый проект сообщества 1c-syntax. Он подключается к Visual Studio Code через расширение для языка 1С и проверяет код по сотням диагностик: длина строки, пробелы вокруг операций, пустые блоки, отсутствие описания экспортных методов, вложенность конструкций.
Те же диагностики работают в SonarQube через плагин для языка 1С. Это удобно для командной разработки: каждое помещение изменений проверяется автоматически, а качество кода видно в отчёте по проекту.
АПК и надстройки над Конфигуратором
АПК (автоматизированная проверка конфигураций) — конфигурация от фирмы 1С, которая проверяет выгрузку вашей конфигурации на соответствие стандартам разработки. Её используют при сертификации решений и в крупных командах.
Для тех, кто остаётся в Конфигураторе, существуют сторонние надстройки над редактором модулей с расширенным форматированием и выравниванием по столбцам. Перед установкой проверьте совместимость надстройки с вашей версией платформы: часть из них перестаёт работать после обновления.
| Инструмент | Что делает | Кому подходит |
|---|---|---|
Конфигуратор, Alt+Shift+F | Только отступы | Быстрая правка, поддержка одной базы |
| EDT | Форматер по правилам, проверки | Разработка с Git, командные проекты |
| BSL LS + VS Code | Диагностики стиля и ошибок | Тем, кто хочет проверок без смены среды |
| SonarQube | Проверка каждой поставки | Команды с код-ревью |
| АПК | Соответствие стандартам 1С | Сертификация, крупные проекты |
Ошибки, из-за которых код выглядит криво после выравнивания
- ❌ Форматирование всего модуля типовой конфигурации. Тысячи изменённых строк превращают следующее обновление в долгое ручное сравнение. Форматируйте только свои фрагменты.
- ❌ Смесь пробелов и табуляции. В Конфигураторе код выглядит ровно, а в EDT, VS Code или при сравнении версий съезжает. Признак — отступы, которые «гуляют» на одну-две позиции.
- ❌ Незакрытая конструкция выше по тексту.
Alt+Shift+Fсдвигает весь хвост модуля вправо. Причина не в редакторе, а в пропущенномКонецЕслиилиКонецЦикла. - ❌ Ручное выравнивание знаков
=в блоке присваиваний. Выглядит аккуратно, но ломается при добавлении переменной с длинным именем и даёт лишние правки соседних строк. - ❌ Попытка выровнять текст запроса через
Alt+Shift+F. Содержимое строки форматер не трогает — для этого есть конструктор запроса.
Перед массовым форматированием модулей в рабочей конфигурации захватите объекты в хранилище и сохраните копию конфигурации в файл .cf — откатить сотни изменений вручную тяжело.