Вопрос о том, как правильно писать код в системе 1С:Предприятие 8, — это не просто спор об эстетике или «красоте» текста. Это вопрос профессиональной этики, удобства командной разработки и, что немаловажно, эффективности отладки приложений. В этой статье мы подробно разберем, какие рекомендации дает фирма 1С, почему нельзя писать условия в одну строку и как автоматизировать проверку своих модулей.
Разберем классический пример, который часто вызывает споры у начинающих разработчиков. Как правильно написать условие: в одну строку или в несколько? Рассмотрим два варианта:
Вариант 1 (Неправильный):
Если а = б Тогда Возврат; КонецЕсли;
Вариант 2 (Правильный по ИТС):
Если а = б Тогда
Возврат;
КонецЕсли;
Проанализируем ситуацию с точки зрения официальных стандартов. Система стандартов и методик разработки конфигураций (публикуемая на ИТС) однозначно утверждает: каждый оператор должен располагаться на отдельной строке. Это фундаментальное правило. Конструкция Если — Тогда — КонецЕсли должна занимать как минимум три строки.
Почему это важно? Выясним причину. Основная цель — обеспечить удобство отладки. Представим, что вы установили точку останова на строке с условием. Если всё написано в одну строку, Конфигуратор остановится на ней, но вы не сможете визуально понять: зашла ли программа внутрь условия или просто перешла к следующей команде. В многострочном варианте вы четко видите переход курсора на строку Возврат;, что подтверждает истинность условия.
Посмотрим на пример из форума: Если А=Б или Если А = Б? Согласно методическим материалам, бинарные операторы (сравнение, математические операции) всегда должны отделяться пробелами с обеих сторон. Это значительно повышает читаемость кода, особенно в сложных формулах.
Разберем правильное оформление математических и логических выражений:
Результат = (СуммаБезНДС * СтавкаНалога) / 100;
Если (Значение > 0) И (ТипОперации = Предоплата) Тогда
// Логика
КонецЕсли;
Использование пробелов позволяет глазу быстрее выцеплять ключевые переменные и операторы, не сливая их в «кашу». Подобная читаемость важна и при программном формировании отчетов, где СКДБилдер значительно сокращает объем текста. Это касается и логических операторов И, ИЛИ, НЕ.
В ходе обсуждения часто всплывает мнение (сообщение №7 на форуме), что уменьшение количества строк или удаление пробелов может ускорить выполнение кода, особенно внутри циклов. Давайте разберем этот миф.
Платформа 1С работает не напрямую с исходным текстовым кодом (модулем), который мы пишем в Конфигураторе. Перед выполнением текст модуля компилируется в промежуточный байт-код. В процессе этой компиляции все лишние пробелы, комментарии и символы переноса строк игнорируются. Байт-код для однострочного условия и для многострочного будет абсолютно идентичным.
Следовательно, экономия на переносах строк никак не влияет на скорость работы программы в пользовательском режиме. Единственное, на что это влияет — на удобство чтения вашего кода коллегами. Писать нечитаемый код ради мифической производительности — плохая практика.
Для того чтобы привести уже написанный текст в порядок, не обязательно расставлять все отступы вручную. Разберем по шагам, как воспользоваться встроенным инструментом:
Если, Для, Пока, Процедура.Важно помнить: встроенный форматировщик Конфигуратора хорошо справляется с отступами (левым краем), но он не умеет переносить оператор Возврат; на новую строку, если вы уже написали его в одну строку с Тогда. Это придется делать самостоятельно или использовать более продвинутые инструменты.
Современная разработка на платформе 1С выходит за рамки обычного Конфигуратора. Если вы хотите, чтобы ваш код соответствовал стандартам «автоматически», рассмотрим следующие инструменты:
1С:EDT (Enterprise Development Tools) — это среда разработки на базе Eclipse. В неё встроен мощный механизм проверки кода в реальном времени (линтинг). Как только вы напишете условие в одну строку, среда подсветит это как предупреждение и предложит исправить согласно стандартам.
BSL Language Server / SonarQube — это внешние инструменты статического анализа. Они позволяют проверять код на наличие ошибок, избыточности и нарушений стиля. Например, они могут найти:
В контексте обсуждения стиля кода затронем важный методический вопрос — использование функции ТекущаяДата(). Рассмотрим разницу между ней и ТекущаяДатаСеанса().
Согласно стандартам для управляемого приложения, рекомендуется использовать ТекущаяДатаСеанса(). Выясним причину: ТекущаяДата() возвращает время сервера, на котором запущен рабочий процесс. Если сервер находится в Москве, а пользователь во Владивостоке, время будет отличаться на 7 часов. ТекущаяДатаСеанса() учитывает часовой пояс, установленный в настройках пользователя, что критически важно для корректного отражения времени совершения операций в распределенных системах.
Правильное оформление касается не только отдельных строк, но и структуры всего модуля в целом. Проанализируем рекомендации по использованию пустых строк:
Пример правильной структуры:
Процедура РассчитатьЗаказы()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ...";
// Выполнение запроса
Результат = Запрос.Выполнить();
КонецПроцедуры
Процедура Печать()
// Следующая процедура через 2 строки
КонецПроцедуры
Соблюдение стандартов 1С — это залог того, что ваш код будет понятен любому другому разработчику, а процесс отладки не превратится в гадание на кофейной гуще. Используйте автоматизированные средства проверки, не пренебрегайте пробелами и всегда помните: код пишется для людей, а не для машины. Машина поймет любой синтаксически верный набор символов, а человеку важно видеть структуру и логику вашей мысли.