Разработка и Конфигурация · 9 мин
Как создать область в 1С: пошаговая инструкция
Пошаговая инструкция по созданию областей в 1С: области в макете табличного документа, программное создание областей и именованные области кода в модулях.
Область в 1С — это именованный фрагмент, который используется в трёх разных контекстах: в макете табличного документа, в самом табличном документе при программной работе и в коде модуля как блок #Область ... #КонецОбласти. Путаница между этими сценариями — главная причина ошибок у начинающих разработчиков: методы и способы создания у них совершенно разные.
Области макета нужны, чтобы выводить печатные формы по частям: шапку, строки таблицы, итоги. Области табличного документа позволяют программно обращаться к диапазону ячеек — читать, очищать, форматировать. Области кода служат для структурирования больших модулей и сворачивания логических блоков в конфигураторе.
Ниже разобраны все три сценария с точными действиями в конфигураторе, примерами кода и проверкой результата. Материал применим к платформе 1С:Предприятие 8.3 в управляемом и обычном приложении.
Что такое область в 1С и какие виды существуют
Прежде чем создавать область, определите, какая именно вам нужна. В макете табличного документа область — это именованный диапазон строк или ячеек, который затем выводится в печатную форму методом Вывести() или Присоединить(). Такие области видны в конфигураторе слева от макета в виде треугольных маркеров.
В готовом табличном документе (например, на форме или в объекте ТабличныйДокумент) область — это адресуемый диапазон ячеек, к которому можно обратиться по имени или координатам. В модуле область — это просто директива препроцессора, которая не влияет на выполнение кода, а только группирует процедуры и функции для удобства навигации.
Как создать область в макете табличного документа
Откройте конфигуратор, найдите нужный объект (например, документ или справочник) и перейдите на вкладку «Макеты». Создайте новый макет типа «Табличный документ» или откройте существующий. Заполните ячейки текстом и параметрами — параметры указываются в квадратных скобках, например [НомерДокумента], либо через свойство «Заполнение» ячейки.
Чтобы создать область из строк, выделите нужные строки, кликнув по номеру первой строки и протянув выделение до последней (или через Shift). Затем откройте меню Таблица — Имена — Назначить имя (в некоторых версиях платформы: Таблица — Имена — Создать область). Введите имя области, например «Шапка» или «СтрокаТовары», и нажмите ОК. Слева от макета появится маркер области.
Для горизонтальной области (по колонкам) выделите колонки и выполните ту же команду — платформа сама определит ориентацию. Если нужна прямоугольная область произвольных ячеек, выделите диапазон мышью и также назначьте имя.
- 1Откройте макет табличного документа в конфигураторе
- 2Заполните ячейки текстом и параметрами
- 3Выделите строки или колонки области
- 4Выполните Таблица — Имена — Назначить имя
- 5Введите уникальное имя области и подтвердите
- 6Проверьте появление маркера области слева от макета
Имена областей должны быть уникальными в пределах макета и не содержать пробелов. Осмысленные имена («Шапка», «Подвал», «СтрокаНоменклатура») сильно упрощают поддержку кода вывода печатной формы.
Как вывести область макета в печатную форму
Созданная в макете область выводится в табличный документ программно. Получите макет методом ПолучитьМакет(), затем получите область методом ПолучитьОбласть(), заполните параметры и выведите её в результирующий табличный документ.
Макет = Документы.РеализацияТоваров.ПолучитьМакет("Печать");
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = Номер;
ОбластьШапка.Параметры.ДатаДокумента = Дата;
ТабДок.Вывести(ОбластьШапка);
Для Каждого СтрокаТовары Из Товары Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовары");
ОбластьСтрока.Параметры.Заполнить(СтрокаТовары);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;Метод Вывести() добавляет область ниже уже выведенных строк. Если нужно строить широкую таблицу вправо (например, колонки периодов), используйте Присоединить(). Перед выводом проверяйте, что все параметры области заполнены, иначе в печатной форме останутся пустые места или шаблонные надписи.
Как создать и получить область программно в табличном документе
В уже сформированном табличном документе области создаются и адресуются методом Область(). Он принимает координаты: номера первой и последней строки и колонки, либо имя ранее созданной области. Например, ТабДок.Область(2, 1, 10, 5) вернёт прямоугольник со строки 2 по 10 и колонки 1 по 5.
Чтобы дать диапазону имя для последующих обращений, используйте метод Область() совместно со свойством имени: получите область и задайте ей имя через ТабДок.Область("R2C1:R10C5").Имя = "ДанныеТаблицы" либо через методы работы с именованными областями. После этого к диапазону можно обращаться ТабДок.Область("ДанныеТаблицы") и менять его оформление — цвет фона, шрифт, границы.
Также доступны адреса вида "R3C2" (одна ячейка), "R3" (вся строка) и "C2" (вся колонка). Это удобно для циклов обхода данных при программном построении отчётов без макета.
Как создать область в модуле кода
Области кода группируют процедуры и функции модуля. Синтаксис предельно прост: блок открывается инструкцией #Область ИмяОбласти и закрывается #КонецОбласти. Внутри области могут быть вложенные области, но пересекаться они не должны.
#Область ПрограммныйИнтерфейс
Функция ПолучитьЦену(Номенклатура) Экспорт
// ...
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция РассчитатьСкидку(Сумма)
// ...
КонецФункции
#КонецОбластиВ типовых конфигурациях приняты стандартные имена областей: «ПрограммныйИнтерфейс», «СлужебныйПрограммныйИнтерфейс», «СлужебныеПроцедурыИФункции», «ОбработчикиСобытийФормы». Придерживайтесь их — это упрощает чтение кода другими разработчиками и соответствует стандартам разработки фирмы «1С». Области сворачиваются кнопкой «−» слева от строки, что удобно в модулях на тысячи строк.
Проверка результата и типичные ошибки
После создания области в макете проверьте её двойным кликом по маркеру — должен выделиться весь диапазон области. Программно корректность вывода проверяется просто: выведите табличный документ на форму или откройте его методом Показать() и убедитесь, что шапка, строки и подвал расположены в правильном порядке, а параметры подставились.
Как проверить результат
Слева от строк виден треугольный маркер с именем
Маркера нет — область не создана или имя не назначено
Параметры подставлены, порядок блоков верный
Пустые поля или ошибка «Область не найдена»
Блок сворачивается, код компилируется
Ошибка «Ожидается #КонецОбласти» при проверке модуля
Отдельная ловушка — изменение макета без обновления кода. Если переименовать область в макете, но забыть поправить строку ПолучитьОбласть("СтароеИмя"), печатная форма упадёт с ошибкой уже у пользователя. После любой правки макета прогоняйте формирование печатной формы хотя бы на одном тестовом документе.
FAQ
Как удалить область из макета?
Выделите область, кликнув по её маркеру слева от макета, затем выполните «Таблица — Имена — Удалить имя» и выберите имя области из списка. Сами ячейки при этом не удаляются — исчезает только именованный диапазон.
Можно ли создать область из несмежных строк?
Нет. Область табличного документа всегда представляет собой непрерывный диапазон строк, колонок или прямоугольник ячеек. Если нужно выводить разрозненные части, создайте несколько отдельных областей и выводите их последовательно.
Почему возникает ошибка «Область не найдена»?
Чаще всего причины: опечатка в имени (учитывается регистр), область удалена или переименована в макете, либо метод ПолучитьОбласть() вызван у табличного документа, а не у макета. Откройте макет и сверьте имя посимвольно со строкой в коде.
Влияют ли области кода #Область на производительность?
Нет. Директивы #Область и #КонецОбласти обрабатываются только редактором кода и полностью игнорируются при компиляции и выполнении. Это исключительно средство визуальной организации модуля.
Как программно узнать размер области табличного документа?
Получите область методом Область() и обратитесь к её свойствам: Верх, Низ, Лево, Право — они содержат номера граничных строк и колонок. Разница Низ минус Верх плюс единица даст высоту области в строках.
Можно ли вкладывать области друг в друга в макете?
В макете табличного документа области не должны пересекаться, но вложенность строк внутрь более крупной области допустима и используется, например, для группировок. В коде модулей вложенность областей разрешена без ограничений по глубине.
Что важно запомнить
Область в макете создаётся выделением строк и командой «Назначить имя», выводится через ПолучитьОбласть() и Вывести(). В табличном документе диапазоны адресуются методом Область() с координатами или именем. В коде используйте #Область и #КонецОбласти со стандартными именами. После переименования областей макета обязательно проверяйте печатную форму.