Форматирование модуля в Конфигураторе: отступы, области и стандарты оформления

· 10 мин

Содержание

Чтобы выровнять код в 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) покажет строку с ошибкой.

Настройка отступов и табуляции в параметрах редактора

Параметры редактора модулей открываются через Сервис → Параметры, вкладка «Модули», подраздел редактирования. Там задаются ширина табуляции и поведение отступов при наборе.

Что стоит проверить:

  1. Ширина табуляции. По умолчанию 4 позиции. Это влияет только на отображение: в файле модуля хранится символ табуляции, а не четыре пробела.
  2. Автоматический отступ. При нажатии Enter новая строка начинается с того же отступа, что и предыдущая. Без этой опции каждую строку приходится сдвигать вручную.
  3. Замена табуляции пробелами. Если такая опция включена, отключите её. В типовых конфигурациях отступы делаются табуляцией, и смесь пробелов с табами ломает вид кода у коллег с другой шириной табуляции.

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

Шрифт модуля тоже настраивается в параметрах. Для выравнивания по столбцам нужен моноширинный шрифт, например Courier New или Consolas: в пропорциональном шрифте колонки комментариев и параметров никогда не встанут ровно.

Как выравнивать условия, циклы, запросы и длинные выражения

Автоформатирование решает вопрос вложенности. Остальное делается руками, и здесь есть устоявшиеся приёмы.

Условия и циклы

Тело каждой конструкции — на один отступ правее её заголовка. Пустая строка отделяет логические шаги внутри процедуры, но не ставится сразу после Тогда или перед КонецЕсли.

Процедура ЗаполнитьТовары(Документ, ДанныеЗаказа) Экспорт

	Для Каждого СтрокаЗаказа Из ДанныеЗаказа Цикл
		Если СтрокаЗаказа.Количество = 0 Тогда
			Продолжить;
		КонецЕсли;

		НоваяСтрока = Документ.Товары.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаЗаказа);
	КонецЦикла;

КонецПроцедуры

Длинные условия и выражения

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

Если ЗначениеЗаполнено(Контрагент)
	И Контрагент.ЭтоГруппа = Ложь
	И НЕ Контрагент.ПометкаУдаления Тогда
	
	ОбработатьКонтрагента(Контрагент);
	
КонецЕсли;

Если условий больше трёх-четырёх, читаемее вынести их в переменную или отдельную функцию с говорящим именем, чем выравнивать пять строк продолжения.

Вызовы с множеством параметров

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

Результат = ОбщегоНазначенияСервер.СформироватьОтчет(
	НастройкиОтчета,
	ДатаНачала,
	ДатаОкончания,
	Истина);

Тексты запросов

Текст запроса — это строка, и Alt+Shift+F его содержимое не выравнивает. Многострочная строка в 1С оформляется так: первая строка открывается кавычкой, каждая следующая начинается с символа |.

Запрос = Новый Запрос;
Запрос.Текст =
	"ВЫБРАТЬ
	|	Товары.Номенклатура КАК Номенклатура,
	|	СУММА(Товары.Количество) КАК Количество
	|ИЗ
	|	Документ.РеализацияТоваровУслуг.Товары КАК Товары
	|ГДЕ
	|	Товары.Ссылка = &Ссылка
	|
	|СГРУППИРОВАТЬ ПО
	|	Товары.Номенклатура";

Самый быстрый способ получить аккуратный текст — открыть его в конструкторе запроса (правая кнопка мыши внутри текста запроса → конструктор) и нажать «ОК». Конструктор пересоберёт текст в своём стандартном виде: ключевые слова прописными буквами, поля с отступом табуляцией, каждое поле на своей строке.

Конструктор может переставить поля и убрать ваши комментарии внутри текста запроса. Если комментарии нужны, сохраните их отдельно или пишите над присваиванием Запрос.Текст.

Символ | у строк, скопированных из внешнего редактора, можно расставить не вручную: в меню Текст → Блок есть команды добавления и удаления переноса строки для выделенного фрагмента.

Области и структура модуля

Отступы делают читаемой процедуру, а области — весь модуль. Область задаётся инструкциями препроцессора:

#Область ПрограммныйИнтерфейс

Функция ОстатокТовара(Номенклатура, Склад) Экспорт
	// ...
КонецФункции

#КонецОбласти

Область сворачивается так же, как процедура, через Ctrl+Num -. Инструкции #Область и #КонецОбласти пишут без отступа, с первой позиции строки, а имя области — одним словом без пробелов.

Принятый порядок областей

В типовых конфигурациях на базе БСП используются стандартные имена областей. Удобно придерживаться их и в своих доработках:

Тип модуляОбласти по порядку
Общий модуль, модуль менеджераПрограммныйИнтерфейс, СлужебныйПрограммныйИнтерфейс, СлужебныеПроцедурыИФункции
Модуль объектаОписаниеПеременных, ПрограммныйИнтерфейс, ОбработчикиСобытий, СлужебныйПрограммныйИнтерфейс, СлужебныеПроцедурыИФункции
Модуль формыОписаниеПеременных, ОбработчикиСобытийФормы, ОбработчикиСобытийЭлементовШапкиФормы, ОбработчикиКомандФормы, СлужебныеПроцедурыИФункции

Пустые области из шаблона удалять не обязательно, но и лепить в модуль все возможные области ради порядка тоже незачем. Для табличных частей формы добавляют область обработчиков событий элементов конкретной таблицы, с её именем в названии области.

Навигация по большому модулю

В модуле на тысячи строк выравнивание теряет смысл, если по нему нельзя быстро перемещаться:

  • 📌 Ctrl+G — переход к строке по номеру, удобно при разборе ошибки из журнала регистрации;
  • 📌 список процедур модуля открывается кнопкой на панели модуля и позволяет прыгнуть к нужной процедуре по имени;
  • 📌 сворачивание всех группировок Ctrl+Shift+Num - превращает модуль в оглавление из процедур и областей.

Правила оформления кода: что принято в типовых конфигурациях

У фирмы 1С есть система стандартов и методик разработки, по которым написаны типовые конфигурации. Требования к оформлению текстов модулей в ней сводятся к нескольким понятным правилам.

ПравилоКак выглядит на практике
Отступы — табуляциейОдин уровень вложенности = один символ табуляции
Длина строки до 120 символовДлинные выражения переносятся, операция — в начале новой строки
Одна инструкция на строкеНе А = 1; Б = 2; в одной строке
Пробелы вокруг операцийСумма = Цена * Количество, а не Сумма=Цена*Количество
Пробел после запятойФункция(Параметр1, Параметр2)
Ключевые слова по-русски, с заглавнойЕсли, КонецЕсли, Истина, а не если или ИСТИНА
Комментарий к экспортной процедуреОписание назначения, параметров и возвращаемого значения над заголовком

Ключевые слова в коде пишут в «верблюжьей» форме (КонецЕсли, ИначеЕсли), а в текстах запросов — прописными (ВЫБРАТЬ, ГДЕ). Смешивать английский и русский синтаксис в одном модуле не принято, даже если платформа это допускает.

Комментарии

Комментарий ставят над кодом, к которому он относится, с тем же отступом. Хвостовые комментарии в конце строки допустимы для коротких пояснений, но их выравнивание по одной колонке разваливается при первой правке соседней строки.

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

Проверка модуля перед помещением в хранилище
Выполнено: 0 / 7

Внешние инструменты проверки и автоформатирования

Конфигуратор умеет только расставлять отступы. Остальные правила проверяют внешние средства.

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 — откатить сотни изменений вручную тяжело.

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

Почему Alt+Shift+F ничего не делает?
Проверьте, что фокус стоит в тексте модуля, а не в дереве конфигурации. Если модуль открыт только для просмотра (объект не захвачен в хранилище или конфигурация на поддержке без права изменения), редактирование, включая форматирование, недоступно.
Почему после форматирования в EDT код в Конфигураторе выглядит иначе?
У форматера EDT больше правил: он может расставить пробелы и переносы, которые Конфигуратор не трогает. Отступы при этом остаются табуляцией, поэтому структура кода совпадает, отличаются только пробелы внутри строк.
Как изменить ширину отступа, не трогая сам код?
Поменяйте ширину табуляции в параметрах модулей. Поскольку отступы хранятся символами табуляции, код просто отобразится шире или уже, а файлы модулей не изменятся.
Влияют ли отступы и пустые строки на скорость работы кода?
Нет. Модуль перед выполнением компилируется, и пробельные символы на скорость не влияют. Форматирование нужно только людям, которые читают код.
Как быстро убрать лишние пустые строки в модуле?
Встроенной команды в Конфигураторе нет. Используйте поиск с заменой или форматер EDT; в BSL Language Server есть диагностика, которая находит подряд идущие пустые строки.