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

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

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

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

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

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

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

Где находится макет и как его открыть

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

Если макета ещё нет, его можно добавить через контекстное меню объекта: «Добавить → Макет». Конструктор предложит выбрать тип макета — для печатных форм и областей нужен тип «Табличный документ». Также существуют общие макеты (ветка «Общие → Общие макеты»), которые доступны из любого места конфигурации.

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

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

Основной способ — команда назначения имени. Выделите в макете строки целиком (кликом по заголовкам строк слева) или произвольный диапазон ячеек, затем выполните команду главного меню «Таблица → Имена → Назначить имя». В открывшемся диалоге введите имя области и подтвердите ввод.

Порядок действий
  1. 1
    Откройте макет в конфигураторе (двойной щелчок по макету в дереве конфигурации)
  2. 2
    Выделите строки или диапазон ячеек, которые должны войти в область
  3. 3
    Выполните команду «Таблица → Имена → Назначить имя» (Ctrl+Shift+N)
  4. 4
    Введите имя области латиницей без пробелов, например Шапка или СтрокаТовары
  5. 5
    Проверьте: имя появилось в выпадающем списке областей в левом верхнем углу редактора или на панели имен

Имя области должно начинаться с буквы, не содержать пробелов и специальных символов. Принято использовать осмысленные имена: Шапка, СтрокаТовары, Подвал, Итого. Такой макет легче читать и сопровождать, особенно когда областей больше трёх-четырёх.

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

Типы областей: строки, столбцы и произвольный диапазон

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

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

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

Область из целых строк

Стандарт для печатных форм: шапка, строка табличной части, подвал. Корректно работает с Вывести() и проверкой Вывести() через ПроверитьВывод().

Область из столбцов

Подходит для горизонтальных отчётов и вывода через Присоединить(). Для обычных печатных форм почти не используется.

Произвольный диапазон ячеек

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

Параметры и заполнение области данными

Область становится полезной, когда в её ячейках заданы параметры. Выделите ячейку, откройте палитру свойств и в свойстве «Заполнение» выберите «Параметр», а в свойстве «Параметр» укажите имя, например НомерДокумента. Теперь из кода этой ячейке можно присвоить значение через коллекцию Параметры области.

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

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

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

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

Учтите: если в ячейке выбрано заполнение «Шаблон», текст внутри квадратных скобок вида [Номенклатура] подставляется автоматически по имени параметра. Это удобно для составных строк, но ошибка в имени внутри скобок приведёт к пустому значению без какого-либо сообщения.

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

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

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

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

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

Имя области в списке областей редактора
Норма

Имя присутствует, при выборе подсвечивается нужный диапазон

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

Имени нет или подсвечивается чужой диапазон

Вызов ПолучитьОбласть() в коде
Норма

Область получена, выводится без ошибки

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

Ошибка «Область не найдена» — проверьте имя и тип макета

Значения параметров на печатной форме
Норма

Ячейки заполнены данными документа

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

Пустые ячейки — не совпадают имена параметров или параметры не заполнены в коде

Типичные ошибки при создании областей

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

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

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

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

Когда областей недостаточно: альтернативы

Макет табличного документа с областями — не единственный способ построения печатных форм. Для отчётов со сложной структурой, группировками и настройками пользователя лучше подходит СКД (система компоновки данных), где макет формируется автоматически по схеме. Для документов Word и Excel, которые должен редактировать пользователь, применяются макеты типа «Двоичные данные» с механизмом печати по шаблону офисного документа.

Маршрут решения

Как выбрать действие

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

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

Частые вопросы

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

Выделите ячейки области и снова откройте «Таблица → Имена → Назначить имя»: в диалоге можно изменить имя. Для удаления имени используйте команду «Таблица → Имена → Убрать имя», предварительно выделив диапазон области. Не забудьте синхронно поправить вызовы ПолучитьОбласть() в коде.

Можно ли создать область программно, без конфигуратора?

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

Почему ПолучитьОбласть() выдаёт ошибку, хотя область есть в макете?

Чаще всего причины три: опечатка в имени, макет получен не от того объекта (например, общий макет вместо макета документа) или макет имеет тип не «Табличный документ». Проверьте тип макета в палитре свойств макета в дереве конфигурации.

Как вывести область рядом, а не под предыдущей?

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

Как проверить, поместится ли область на текущей странице?

Перед выводом вызовите метод ТабДок.ПроверитьВывод(МассивОбластей) — он вернёт Истина, если области помещаются на страницу. Если Ложь, выведите горизонтальный разделитель страниц методом ВывестиГоризонтальныйРазделительСтраниц() и затем выводите область.

Можно ли использовать одну область несколько раз?

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

Итог

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

Область создаётся выделением строк и командой «Таблица → Имена → Назначить имя». Имя должно быть уникальным, без пробелов, и совпадать с вызовом ПолучитьОбласть() в коде. Для печатных форм используйте области из целых строк, повторяющуюся область получайте один раз до цикла, а результат проверяйте на тестовом документе.