Как сохранить отступы и параметры табуляции при форматировании кода в 1С (Shift+Alt+F)?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При оформлении исходного кода на встроенном языке 1С разработчики часто выносят длинные списки параметров процедур и функций на отдельные строки для улучшения читаемости. Однако при использовании встроенной команды форматирования блока по комбинации клавиш Shift+Alt+F многие сталкиваются с неприятным поведением редактора Конфигуратора: все аккуратно расставленные отступы параметров сбрасываются к левому краю базового уровня блока. Разберем, почему так происходит и как настроить комфортную работу с кодом.

Проанализируем суть проблемы и поведение штатного форматирования

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


_ПечатныеФормы.ЗаполнитьПараметрыПечатиТабличногоДокументаПоУмолчанию(
    ТабличныйДокумент,
    ЭтотОбъект,
    Неопределено);

В приведенном фрагменте параметры логично смещены вправо с помощью символов табуляции или пробелов. Но если выделить этот фрагмент в Конфигураторе и применить команду форматирования блока (Shift+Alt+F), редактор преобразует текст следующим образом:


    _ПечатныеФормы.ЗаполнитьПараметрыПечатиТабличногоДокументаПоУмолчанию(
ТабличныйДокумент,
ЭтотОбъект,
Неопределено);

Как видим, первая строка получает отступ текущего синтаксического блока (например, тела процедуры или условия), а последующие строки вызова метода принудительно сдвигаются влево. В результате визуальная структура вызова нарушается, и программисту приходится заново вручную выравнивать код.

Выясним техническую причину ограничений Конфигуратора

Рассмотрим, как устроен встроенный алгоритм форматирования в классическом Конфигураторе 1С:

  1. Штатный форматер анализирует программный модуль исключительно на уровне верхнеуровневых синтаксических конструкций: Если ... КонецЕсли, Для ... КонецЦикла, Пока ... КонецЦикла, Попытка ... КонецПопытки, а также границы процедур и функций.
  2. Алгоритм не выполняет глубокого синтаксического анализа выражений и не отслеживает вложенность круглых скобок при вызове методов. Любая новая строка внутри незавершенной инструкции воспринимается как обычная строка внутри текущего логического блока.
  3. В настройках платформы (пункт меню «Сервис — Параметры — Модули») отсутствуют какие-либо опции для кастомизации правил расстановки переносов или сохранения пользовательских смещений внутри многострочных выражений.

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

Решение 1. Переход на 1C:Enterprise Development Tools (1C:EDT)

Если для проекта допустим выбор среды разработки, наиболее полноценным решением является использование современной IDE от фирмы 1С — 1C:EDT. В отличие от Конфигуратора, редактор EDT изначально проектировался на базе полнофункционального синтаксического анализатора (AST):

  1. В EDT форматер кода умеет определять контекст открытых скобок и автоматически делает дополнительный синтаксический отступ для второй и последующих строк параметров.
  2. В диалоге настроек среды («Параметры — V8 — Встроенный язык — Форматирование») разработчик может гибко задавать стиль оформления: выравнивать параметры по позиции открывающей скобки, использовать стандартный сдвиг табуляции или сохранять существующие переводы строк.
  3. Применение автоформатирования в EDT не ломает структуру сложных вложенных вызовов, конструкторов структур и литералов массивов.

Решение 2. Использование расширений редактора (TurboConf, Снегопат)

Если разработка ведется в классическом Конфигураторе, решить задачу автоматизации отступов можно с помощью сторонних инструментов расширения функциональности среды, таких как TurboConf или Снегопат:

  1. Специализированные скрипты и расширения для Конфигуратора перехватывают нажатие комбинаций форматирования или предлагают собственные команды обработки кода.
  2. В таких инструментах реализовано «умное» позиционирование курсора и добавление дополнительного смещения со второй строки инструкции при переносе параметров или выражений.
  3. Благодаря этому при наборе и редактировании текста сохраняется правильная лесенка отступов, что избавляет от необходимости вручную нажимать клавишу Tab для каждого аргумента.

Решение 3. Использование внешних форматеров и сред (VS Code, BSL LS, OneScript)

В современных процессах разработки с использованием системы контроля версий Git широко применяется подход внешней обработки исходных текстов:

  1. Редактирование модулей может выполняться во внешнем редакторе Visual Studio Code с установленным расширением BSL Language Server. Языковой сервер поддерживает полноценное автоформатирование по стандартам 1С, корректно обрабатывая многострочные вызовы методов и параметров.
  2. Также возможен запуск консольных утилит форматирования кода на базе OneScript в рамках автоматических проверок (pre-commit хуков). Такие утилиты приводят программный код к эталонному виду перед фиксацией изменений в репозитории без искажения отступов аргументов.

Решение 4. Приемы работы в штатном Конфигураторе без сторонних инструментов

Если политика безопасности или условия работы запрещают установку сторонних плагинов и внешних сред, скорректируем привычный сценарий форматирования кода в Конфигураторе:

  1. Выборочное форматирование: избегайте применения команды Shift+Alt+F ко всему модулю целиком. Выделяйте и форматируйте только блоки управляющих конструкций (условия, циклы), не затрагивая многострочные вызовы процедур.
  2. Форматирование до переноса: сначала выровняйте логический блок комбинацией Shift+Alt+F, когда вызов функции записан в одну строку, и только после этого разнесите параметры по отдельным строкам с нужными отступами.
  3. Групповое смещение: если форматирование все же сбросило параметры к левому краю, выделите сразу все строки параметров и нажмите клавишу Tab один или два раза — это сместит весь блок параметров одновременно, что существенно быстрее посимвольного выравнивания.
← На главную