Вопрос автоматического форматирования кода является одним из самых актуальных для разработчиков, стремящихся к чистоте и единообразию своих модулей. В классическом Конфигураторе 1С, к сожалению, отсутствует встроенный мощный механизм «форматирования по одной кнопке», аналогичный тем, что есть в современных IDE (Visual Studio, IntelliJ IDEA или PyCharm). Однако сообщество и фирма «1С» предлагают несколько альтернативных путей решения этой задачи. Разберем подробно каждый из них.
Прежде чем переходить к сложным внешним инструментам, проанализируем, что предлагает сама платформа «из коробки». В Конфигураторе существуют механизмы, которые позволяют частично автоматизировать написание «правильного» кода:
Для настройки этих функций пройдем по пути: Сервис — Параметры — Текстовый редактор — Автозамена. Здесь можно включить автоматическое исправление регистра и использование контекстной подсказки.
Поскольку официального API для расширения функционала редактора 1С не существует, разработчики создали инструменты, которые внедряются в работу Конфигуратора извне. Рассмотрим их подробнее.
Снегопат (Snegopat) — это наиболее близкое решение к понятию «Add-In» для Excel. Он работает как динамическая библиотека, которая загружается вместе с Конфигуратором и предоставляет объектную модель для доступа к окнам и текстам модулей. С помощью скриптов на JavaScript или VBScript в Снегопате реализованы полноценные форматтеры, которые умеют:
КонецПроцедуры вместо конецпроцедуры).Турбоконф (TurboConf) — это отдельное приложение, которое работает «поверх» Конфигуратора. Оно перехватывает нажатия горячих клавиш и выполняет автоматизированные действия. Функция «Форматирование кода» в Турбоконфе позволяет мгновенно привести весь текст модуля к заданному стандарту. Рассмотрим пример того, как может выглядеть код до и после обработки таким форматтером:
До форматирования:
перем строка;
строка="Привет мир!";
Если а=б тогда
сообщить(строка);
конецесли;
После форматирования форматтером:
Перем Строка;
Строка = "Привет мир!";
Если А = Б Тогда
Сообщить(Строка);
КонецЕсли;
Если работа в классическом Конфигураторе кажется слишком ограниченной, проанализируем современные альтернативы, где форматирование является базовой функцией.
1C:Enterprise Development Tools (EDT) — это среда разработки нового поколения, построенная на базе Eclipse. Здесь вопрос с форматтером решен полностью. По нажатию комбинации клавиш Ctrl + Shift + F весь текст модуля выравнивается согласно настройкам. В настройках EDT можно детально указать:
Visual Studio Code (VS Code) с установленным расширением BSL Language Server. Многие команды используют VS Code как основной редактор для написания кода 1С, синхронизируя изменения с базой. BSL Language Server поддерживает стандарт «Format on Save» — как только вы нажимаете Ctrl + S, код автоматически перестраивается по заданным правилам оформления. Это исключает появление «грязного» кода в хранилище.
Важно прояснить технический момент, упомянутый в обсуждении. Файлы с расширением .cfe (Configuration Extension) не являются редакторами кода или плагинами для Конфигуратора.
Расширение конфигурации — это механизм, позволяющий изменять логику типового решения (например, «Бухгалтерии предприятия»), не снимая его с поддержки. Внутри расширения вы пишете код в том же стандартном редакторе Конфигуратора. Оно помогает модифицировать программу, но никак не добавляет функции автоматического форматирования в саму среду разработки.
При использовании любого форматтера важно понимать, к какому идеалу мы стремимся. Фирма «1С» опубликовала официальный «Стандарт оформления кода», который рекомендует:
Процедура, Функция, Если).+, -, =) пробелами.Соблюдение этих правил делает код понятным для любого другого разработчика, а использование инструментов автоматизации (Snegopat, TurboConf или EDT) позволяет не тратить на это время вручную.
Подведем итог: если вы хотите остаться в классическом Конфигураторе, ваш выбор — TurboConf или Snegopat. Если вы готовы к более современным инструментам с мощной встроенной поддержкой стандартов кодирования, стоит рассмотреть переход на 1C:EDT.