К статье
Практический материал

Разработка и Конфигурация · 8 мин

Область в 1С: что это такое и как правильно использовать

Область в 1С — это директива #Область для группировки кода в модуле. Разбираем синтаксис, вложенность, типовые области и типичные ошибки разработчиков.

Область в 1С — это служебная конструкция встроенного языка, которая визуально и логически группирует код внутри модуля. Она оформляется директивами препроцессора #Область ИмяОбласти и #КонецОбласти и позволяет сворачивать фрагменты кода в конфигураторе, как блоки в других средах разработки.

Области не влияют на выполнение программы: платформа 1С игнорирует их при компиляции и исполнении. Их единственная задача — сделать большой модуль читаемым. В типовых модулях, где могут быть тысячи строк кода, без областей навигация превращается в бесконечную прокрутку.

Чаще всего с областями сталкиваются при изучении модулей форм и общих модулей типовых конфигураций: там встречаются стандартные разделы «ПрограммныйИнтерфейс», «СлужебныеПроцедурыИФункции», «ОбработчикиСобытийФормы». Понимание этой структуры помогает быстро находить нужный код и размещать собственные доработки в правильном месте.

Что такое область и как она устроена

Область состоит из двух директив препроцессора: открывающей #Область ИмяОбласти и закрывающей #КонецОбласти. Между ними размещается любой код: процедуры, функции, объявления переменных. Имя области пишется без кавычек и обычно отражает назначение сгруппированного кода.

В конфигураторе рядом с заголовком области появляется значок сворачивания: щелчок по нему прячет содержимое, оставляя видимой только строку с именем. Это удобно при работе с модулями в несколько тысяч строк — разработчик раскрывает только тот раздел, который редактирует.

Важно понимать: область — это не пространство имен и не область видимости. Процедура, объявленная внутри области, доступна по тем же правилам, что и вне её. Директивы никак не ограничивают видимость переменных и методов.

Синтаксис и правила оформления

Базовый синтаксис выглядит так:

#Область ОписаниеПеременных

Перем СчетчикДокументов;

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

Имя области принято писать без пробелов, в стиле имен процедур (каждое слово с заглавной буквы), хотя технически пробелы допустимы. Закрывающая директива #КонецОбласти пишется без имени — платформа сама сопоставляет её с ближайшей открытой областью.

Области поддерживают вложенность: внутри одной области можно открыть другую. Это используется в больших общих модулях, где раздел «СлужебныеПроцедурыИФункции» дробится на тематические подразделы. Главное правило — вложенные области должны закрываться в обратном порядке, как скобки.

Типичные ошибки
01
Незакрытая область: забыли #КонецОбласти — весь код до конца модуля сворачивается внутрь и структура «плывёт»
02
Пересекающиеся области: открыли вторую область, не закрыв первую, и закрыли в неверном порядке — нарушается вложенность
03
Область внутри тела процедуры: директива разрывает процедуру, что затрудняет чтение и может привести к ошибкам при рефакторинге
04
Имя области с опечаткой при копировании: одинаковые по смыслу разделы называются по-разному, поиск по модулю усложняется

Стандартные области в типовых модулях

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

Имя областиЧто содержитГде встречается
ОписаниеПеременныхЭкспортные и локальные переменные модуляОбщие модули, модули форм
ПрограммныйИнтерфейсЭкспортные процедуры и функции, предназначенные для вызова извнеОбщие модули, модули менеджеров
ОбработчикиСобытийФормыПриСозданииНаСервере, ПриОткрытии и другие событияМодули форм
ОбработчикиКомандФормыОбработчики команд и кнопокМодули форм
СлужебныйПрограммныйИнтерфейсМетоды для вызова из подсистем конфигурацииОбщие модули БСП
СлужебныеПроцедурыИФункцииВнутренние неэкспортные методы модуляЛюбые модули

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

Как создать и использовать область на практике

Создание области занимает несколько секунд. В конфигураторе откройте нужный модуль, установите курсор в начало группируемого фрагмента и введите директиву открытия, затем после последней строки фрагмента — директиву закрытия.

Порядок действий
  1. 1
    Откройте модуль в конфигураторе и определите логически связанную группу процедур или функций
  2. 2
    Перед первой строкой группы введите #Область и осмысленное имя без пробелов, например #Область РаботаСКонтрагентами
  3. 3
    После последней строки группы введите #КонецОбласти
  4. 4
    Нажмите значок сворачивания рядом с заголовком области — содержимое должно скрыться, оставив только имя
  5. 5
    Проверьте структуру модуля через список процедур (Ctrl+Alt+P) или панель структуры модуля

Проверить корректность просто: если область сворачивается и разворачивается, а остальной код модуля не «прилипает» к ней, директивы расставлены правильно. Если при сворачивании скрывается лишний код — закрывающая директива стоит не на месте.

При доработке типового модуля сначала найдите подходящую существующую область, и только если её нет — создавайте свою. Например, новую функцию расчёта скидки логично поместить в «СлужебныеПроцедурыИФункции» или в тематический подраздел, а не между обработчиками событий формы.

В модулях форм удобно выделять отдельную область под прикладную логику доработки, например #Область ДоработкиПроекта. При обновлении конфигурации сравнение модулей идёт быстрее: все свои изменения видны в одном месте, а не размазаны по типовому коду.
ПЗ
Практическое замечание

Чем область отличается от инструкций препроцессора

Директивы #Область внешне похожи на инструкции препроцессора #Если Сервер Тогда ... #КонецЕсли, но их назначение принципиально разное. Инструкции препроцессора влияют на компиляцию: код внутри них включается или исключается в зависимости от контекста исполнения (сервер, клиент, тонкий клиент).

Область же полностью прозрачна для компилятора: код внутри неё исполняется так, как если бы директив не было. Перепутать их опасно: обёртывание кода в #Если Сервер Тогда вместо области приведёт к тому, что на клиенте этот код просто не будет существовать.

Сравнение вариантов

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

Только группировка и сворачивание кода в редакторе. Не влияет на компиляцию и выполнение

#Если ... Тогда ... #КонецЕсли

Условная компиляция по контексту исполнения. Код физически отсутствует в неподходящих контекстах

Процедура или функция

Выполняемая единица кода с именем, параметрами и возможностью вызова из других мест

Когда области не нужны и как не перегрузить модуль

В маленьких модулях на две-три процедуры области избыточны: они добавляют служебные строки, не давая выигрыша в навигации. Правило простое — если весь модуль помещается на пару экранов, структурировать его областями не требуется.

Обратная крайность — дробление на десятки мелких областей по одной процедуре. Такой модуль читается хуже, чем без областей: список свёрнутых заголовков превращается в шум. Разумный ориентир — группировать не единичные методы, а смысловые разделы из нескольких процедур.

Итог

Что важно запомнить

Область — это директивы #Область и #КонецОбласти для группировки и сворачивания кода. Она не влияет на выполнение программы и видимость методов. Размещайте код по стандартным разделам: ПрограммныйИнтерфейс, обработчики событий, СлужебныеПроцедурыИФункции. Каждую открытую область закрывайте и не смешивайте области с инструкциями препроцессора.

Частые вопросы об областях в 1С

Влияет ли область на область видимости процедур?

Нет. Видимость процедуры определяется только ключевым словом «Экспорт» и типом модуля. Процедура внутри области вызывается по тем же правилам, что и объявленная вне всяких областей.

Можно ли вкладывать области друг в друга?

Да, вложенность поддерживается. Внутренняя область должна полностью закрываться до закрытия внешней. Так в больших общих модулях раздел «СлужебныеПроцедурыИФункции» делят на тематические подразделы.

Почему после добавления области сворачивается весь модуль?

Значит, закрывающая директива #КонецОбласти отсутствует или стоит слишком поздно. Найдите открывающую директиву и проверьте, где фактически закрывается область, затем перенесите #КонецОбласти сразу после нужного фрагмента.

Нужно ли ставить области в модуле объекта или набора записей?

Да, если модуль большой. Для модулей объектов стандарты рекомендуют разделы с обработчиками событий (ОбработкаЗаполнения, ПередЗаписью и другие), программным интерфейсом и служебными процедурами. В коротком модуле из одного обработчика области не нужны.

Работают ли области в EDT так же, как в конфигураторе?

Да, 1C:EDT поддерживает директивы #Область и #КонецОбласти со сворачиванием. Имена областей и правила вложенности идентичны, поэтому модули переносятся между инструментами без изменений.