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

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

Как создать область в 1С: пошаговая инструкция

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

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

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

Ниже разобраны все три сценария с точными действиями в конфигураторе, примерами кода и проверкой результата. Материал применим к платформе 1С:Предприятие 8.3 в управляемом и обычном приложении.

Что такое область в 1С и какие виды существуют

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

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

Как создать область в макете табличного документа

Откройте конфигуратор, найдите нужный объект (например, документ или справочник) и перейдите на вкладку «Макеты». Создайте новый макет типа «Табличный документ» или откройте существующий. Заполните ячейки текстом и параметрами — параметры указываются в квадратных скобках, например [НомерДокумента], либо через свойство «Заполнение» ячейки.

Чтобы создать область из строк, выделите нужные строки, кликнув по номеру первой строки и протянув выделение до последней (или через Shift). Затем откройте меню Таблица — Имена — Назначить имя (в некоторых версиях платформы: Таблица — Имена — Создать область). Введите имя области, например «Шапка» или «СтрокаТовары», и нажмите ОК. Слева от макета появится маркер области.

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

Создание области в макете
  1. 1
    Откройте макет табличного документа в конфигураторе
  2. 2
    Заполните ячейки текстом и параметрами
  3. 3
    Выделите строки или колонки области
  4. 4
    Выполните Таблица — Имена — Назначить имя
  5. 5
    Введите уникальное имя области и подтвердите
  6. 6
    Проверьте появление маркера области слева от макета

Имена областей должны быть уникальными в пределах макета и не содержать пробелов. Осмысленные имена («Шапка», «Подвал», «СтрокаНоменклатура») сильно упрощают поддержку кода вывода печатной формы.

Как вывести область макета в печатную форму

Созданная в макете область выводится в табличный документ программно. Получите макет методом ПолучитьМакет(), затем получите область методом ПолучитьОбласть(), заполните параметры и выведите её в результирующий табличный документ.

bsl
Макет = Документы.РеализацияТоваров.ПолучитьМакет("Печать");
ТабДок = Новый ТабличныйДокумент;

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = Номер;
ОбластьШапка.Параметры.ДатаДокумента = Дата;
ТабДок.Вывести(ОбластьШапка);

Для Каждого СтрокаТовары Из Товары Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовары");
    ОбластьСтрока.Параметры.Заполнить(СтрокаТовары);
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

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

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

В уже сформированном табличном документе области создаются и адресуются методом Область(). Он принимает координаты: номера первой и последней строки и колонки, либо имя ранее созданной области. Например, ТабДок.Область(2, 1, 10, 5) вернёт прямоугольник со строки 2 по 10 и колонки 1 по 5.

Чтобы дать диапазону имя для последующих обращений, используйте метод Область() совместно со свойством имени: получите область и задайте ей имя через ТабДок.Область("R2C1:R10C5").Имя = "ДанныеТаблицы" либо через методы работы с именованными областями. После этого к диапазону можно обращаться ТабДок.Область("ДанныеТаблицы") и менять его оформление — цвет фона, шрифт, границы.

Также доступны адреса вида "R3C2" (одна ячейка), "R3" (вся строка) и "C2" (вся колонка). Это удобно для циклов обхода данных при программном построении отчётов без макета.

Как создать область в модуле кода

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

bsl
#Область ПрограммныйИнтерфейс

Функция ПолучитьЦену(Номенклатура) Экспорт
    // ...
КонецФункции

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

#Область СлужебныеПроцедурыИФункции

Функция РассчитатьСкидку(Сумма)
    // ...
КонецФункции

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

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

Проверка результата и типичные ошибки

После создания области в макете проверьте её двойным кликом по маркеру — должен выделиться весь диапазон области. Программно корректность вывода проверяется просто: выведите табличный документ на форму или откройте его методом Показать() и убедитесь, что шапка, строки и подвал расположены в правильном порядке, а параметры подставились.

Контрольные точки

Как проверить результат

Маркер области в макете
Норма

Слева от строк виден треугольный маркер с именем

Тревожный признак

Маркера нет — область не создана или имя не назначено

Вывод печатной формы
Норма

Параметры подставлены, порядок блоков верный

Тревожный признак

Пустые поля или ошибка «Область не найдена»

Область кода
Норма

Блок сворачивается, код компилируется

Тревожный признак

Ошибка «Ожидается #КонецОбласти» при проверке модуля

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

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

FAQ

Как удалить область из макета?

Выделите область, кликнув по её маркеру слева от макета, затем выполните «Таблица — Имена — Удалить имя» и выберите имя области из списка. Сами ячейки при этом не удаляются — исчезает только именованный диапазон.

Можно ли создать область из несмежных строк?

Нет. Область табличного документа всегда представляет собой непрерывный диапазон строк, колонок или прямоугольник ячеек. Если нужно выводить разрозненные части, создайте несколько отдельных областей и выводите их последовательно.

Почему возникает ошибка «Область не найдена»?

Чаще всего причины: опечатка в имени (учитывается регистр), область удалена или переименована в макете, либо метод ПолучитьОбласть() вызван у табличного документа, а не у макета. Откройте макет и сверьте имя посимвольно со строкой в коде.

Влияют ли области кода #Область на производительность?

Нет. Директивы #Область и #КонецОбласти обрабатываются только редактором кода и полностью игнорируются при компиляции и выполнении. Это исключительно средство визуальной организации модуля.

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

Получите область методом Область() и обратитесь к её свойствам: Верх, Низ, Лево, Право — они содержат номера граничных строк и колонок. Разница Низ минус Верх плюс единица даст высоту области в строках.

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

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

Итог

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

Область в макете создаётся выделением строк и командой «Назначить имя», выводится через ПолучитьОбласть() и Вывести(). В табличном документе диапазоны адресуются методом Область() с координатами или именем. В коде используйте #Область и #КонецОбласти со стандартными именами. После переименования областей макета обязательно проверяйте печатную форму.