При работе с объемными модулями в 1С:Предприятие разработчики часто сталкиваются с проблемой «громоздкого» кода. Огромные тексты запросов, длинные описания алгоритмов или закомментированные фрагменты кода могут занимать сотни строк, затрудняя чтение основной логики процедуры. В этой статье мы подробно разберем, как реализовать раскрывающиеся (сворачиваемые) блоки кода и комментариев, чтобы сделать работу в конфигураторе более комфортной, применяя стандарты и методики разработки конфигураций 1С.
Наиболее правильным и универсальным способом создания сворачиваемых блоков внутри программных модулей 1С является использование специальных препроцессорных директив #Область (Region) и #КонецОбласти (EndRegion). Рассмотрим, почему этот метод считается эталонным.
Проанализируем синтаксис этого механизма. Директива позволяет объединить произвольный фрагмент кода (даже если он находится внутри тела функции) в именованный блок, который можно свернуть одним нажатием на «плюсик» слева от номера строки. Это особенно полезно, когда нужно спрятать большой текст запроса, который в данный момент не требует редактирования. Чтобы быстро привести структуру модуля в порядок, можно использовать инструмент для анализа и автоматического редактирования модулей, который помогает канонизировать оформление по стандартам 1С.
Рассмотрим пример того, как правильно оформить такой блок:
#Область ТекстЗапросаДляБудущихДоработок
// Здесь располагается ваш большой запрос
// Который занимает много места
// И его нужно скрыть
ТекстЗапроса = "ВЫБРАТЬ * ИЗ Справочник.Номенклатура";
#КонецОбласти
Важно отметить несколько технических нюансов работы с областями:
#Область обязательно должно следовать имя. Оно может быть любым, но лучше использовать понятные названия, которые будут видны в свернутом состоянии.Многие разработчики ожидают, что обычные комментарии, начинающиеся с символов //, будут автоматически сворачиваться. Однако в стандартных настройках 1С это поведение часто отключено или ограничено. Выясним причину и настроим инструмент правильно.
Разберем по шагам, как включить группировку комментариев в Конфигураторе:
Важное ограничение: Проанализируем работу синтаксического анализатора 1С. В классическом Конфигураторе группировка обычных комментариев (зеленый текст) работает только в том случае, если они находятся вне тела процедур и функций. Внутри метода платформа отдает приоритет отображению исполняемого кода, поэтому обычные многострочные комментарии там сворачиваться не будут.
Иногда разработчики прибегают к нестандартным методам, чтобы добиться сворачивания кода внутри функций, если использование #Область по каким-то причинам не подходит. Рассмотрим ситуацию, когда нужно скрыть большой кусок «мертвого» кода.
Один из таких методов — оборачивание кода в логическое условие, которое никогда не выполнится. Поскольку условия в 1С всегда имеют узел группировки, этот блок можно будет свернуть.
Если Ложь Тогда
// Здесь лежит портянка кода,
// которую мы хотим скрыть от глаз,
// но не хотим удалять
КонецЕсли;
Внимание: Мы крайне не рекомендуем использовать этот метод в промышленной разработке. С точки зрения чистоты кода (Clean Code), наличие конструкций Если Ложь Тогда считается «антипаттерном». Такой код путает коллег и может привести к ошибкам при анализе логики модуля. Для выявления подобных проблем и повышения качества разработки лучше использовать статический анализатор кода проектов или проводить регулярный анализ конфигураций на наличие ошибок. Если вам действительно нужно скрыть текст, используйте #Область.
Если ваша команда перешла на использование 1C:EDT (Enterprise Development Tool), то возможности управления отображением текста значительно расширяются. В отличие от старого Конфигуратора, EDT построена на базе Eclipse, что дает гораздо более гибкий механизм фолдинга (сворачивания).
В EDT мы можем:
/// для создания аннотаций к методам, которые автоматически группируются и используются для формирования контекстной подсказки.Выясним, как профессиональные разработчики 1С (уровня 1С:Эксперт) рекомендуют поступать с громоздкими конструкциями, которые «мозолят глаза».
Проанализируем ситуацию: у вас есть запрос на 200 строк. Оставлять его в коде, даже под областью — не всегда лучшее решение. Рассмотрим более элегантные варианты:
ЭтотОбъект.ПолучитьМакет("ИмяМакета").ПолучитьТекст(). Это полностью очистит программный модуль от строковых портянок.///. Это не только позволяет сворачивать описание, но и помогает другим разработчикам видеть описание параметров при наведении курсора на вызов функции.Подведем итог: для создания раскрывающегося комментария внутри кода 1С используйте директиву #Область. Для настройки общего поведения редактора не забудьте заглянуть в параметры группировки модулей. И всегда стремитесь к тому, чтобы ваш код был лаконичным, а вспомогательные данные (такие как тексты запросов) хранились в предназначенных для этого местах, например, в макетах.