Разработка и Конфигурация · 12 мин
Как создать область в макете 1С 8.3
Как создать именованную область в макете табличного документа 1С 8.3: выделение ячеек, типы областей, обращение из кода, типичные ошибки и FAQ.
Область в макете 1С 8.3 — это именованный фрагмент табличного документа, к которому можно обратиться из программного кода. Без областей макет остаётся статичной «картинкой»: вывести шапку печатной формы, строки табличной части и итоги в нужном порядке не получится. Разработчик выделяет нужные ячейки, присваивает имя области, а затем в модуле получает её через метод ПолучитьОбласть() и заполняет параметры.
Чаще всего макеты с областями используются для печатных форм документов: счетов, актов, накладных, доверенностей. Структура такого макета обычно повторяется: область «Шапка», область «Строка» (выводится в цикле), область «Подвал» с итогами и подписями. Понимание того, как создавать и называть области, — базовый навык для любой доработки печатных форм в конфигураторе.
Ниже разобраны способы создания областей через конфигуратор и программно, различия между именованными областями и областями по номерам строк, правила именования и типичные ошибки, из-за которых печатная форма выводится пустой или падает с ошибкой «Область не найдена».
Что такое область макета и зачем она нужна
Макет табличного документа в 1С — это шаблон, хранящийся в конфигурации (общие макеты) или внутри объекта метаданных, например документа или справочника. Сам по себе макет не выводится на печать: программист извлекает из него отдельные области, заполняет параметры значениями и собирает итоговый табличный документ как конструктор.
Область может занимать одну ячейку, несколько ячеек, целые строки или прямоугольный диапазон. Для печатных форм чаще всего используют горизонтальные области — целые строки, потому что их удобно выводить друг под другом методом Вывести(). Вертикальные области применяют реже, например при формировании документа слева направо методом Присоединить().
Внутри области ячейки могут содержать три вида заполнения: текст (статичная надпись), параметр (значение подставляется из кода, например [НомерДокумента]) и шаблон (смесь текста и параметров). Это позволяет один раз нарисовать форму и многократно заполнять её разными данными.
Создание области через конфигуратор: пошаговая инструкция
Основной способ — назначение имени выделенному диапазону в редакторе табличного документа. Порядок действий одинаков для общих макетов и макетов объектов метаданных.
- 1Откройте конфигуратор и найдите нужный макет: Общие — Общие макеты, либо ветка конкретного объекта, например Документы — РеализацияТоваровУслуг — Макеты
- 2Откройте макет двойным щелчком — появится редактор табличного документа
- 3Выделите строки или ячейки будущей области: щёлкните по номеру первой строки и протяните до последней, либо выделите прямоугольный диапазон мышью
- 4Выполните команду меню Таблица — Имена — Назначить имя (сочетание клавиш Ctrl+Shift+N)
- 5Введите имя области, например Шапка, Строка, Подвал, и нажмите ОК
- 6Сохраните конфигурацию (F7 или Ctrl+S) и проверьте область в коде через ПолучитьОбласть()
После назначения имени выделенные строки в редакторе подсвечиваются серой рамкой слева, а имя области отображается в поле имени (слева от строки формул), когда курсор стоит внутри области. Это визуальный признак того, что область создана корректно.
Если нужно изменить состав области, не удаляя её, выделите новый диапазон и назначьте то же имя повторно — старое определение будет замещено. Удалить имя можно через меню Таблица — Имена, выбрав имя в списке и нажав «Удалить».
Типы областей и правила именования
В 1С различают области по способу выделения. Горизонтальная область включает целые строки и выводится методом Вывести(). Произвольная прямоугольная область задаётся диапазоном ячеек и подходит для вывода в произвольное место документа. Вертикальные области используются с методом Присоединить() при построении документа слева направо.
| Тип области | Как создаётся | Когда применяется |
|---|---|---|
| Горизонтальная (строки) | Выделение целых строк + назначение имени | Шапки, строки табличных частей, подвалы печатных форм |
| Прямоугольная | Выделение диапазона ячеек + назначение имени | Блоки подписей, печати, фрагменты внутри строк |
| Область по номерам строк | Без имени, обращение «R5:R10» или диапазон | Разовые доработки, когда именовать избыточно |
Имена областей должны начинаться с буквы, не содержать пробелов и спецсимволов; допустимы буквы, цифры и подчёркивания. Используйте осмысленные имена: ШапкаТаблицы, СтрокаНоменклатура, ИтогоПоДокументу. Имя Область1 через месяц сопровождения ничего не скажет ни вам, ни коллеге.
Обращение к области из программного кода
После создания области работа с ней выполняется в модуле менеджера объекта (для печатных форм) или в общем модуле. Типовой код выглядит так: получаем макет, получаем область, заполняем параметры, выводим в результирующий табличный документ.
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = Ссылка.Номер;
ОбластьШапка.Параметры.Контрагент = Ссылка.Контрагент;
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТЧ Из Ссылка.Товары Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТЧ);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Обратите внимание: метод Параметры.Заполнить() сопоставляет параметры области с полями источника по имени. Если параметр в макете называется Номенклатура, а в табличной части поле называется так же — значение подставится автоматически. Несовпадающие имена нужно заполнять вручную по одному.
Один и тот же объект области можно выводить многократно: при каждом вызове Вывести() в результирующий документ добавляется новая копия с текущими значениями параметров. Это стандартный приём для вывода строк табличной части в цикле.
Программное создание областей без макета
Иногда макет строится полностью из кода, без заранее нарисованного шаблона — например, при универсальном выводе произвольных данных. В этом случае области создаются методами табличного документа: Область() возвращает область по координатам, а имена назначаются через свойство области.
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R1C1:R1C3").Объединить();
ТабДок.Область("R1C1").Текст = "Отчёт по продажам";
ОбластьШапки = ТабДок.Область("R1:R3");
ОбластьШапки.СоздатьФорматСтрок();
Сравнение вариантов
Подходит для печатных форм с фиксированной структурой; удобно сопровождать, дизайн виден визуально. Требует изменения макета при изменении формы
Подходит для разовых доработок и быстрых правок; хрупко — вставка строки в макет ломает адресацию
Подходит для универсальных выгрузок с переменным набором колонок; больше кода, нет визуального редактирования
Выбор зависит от задачи. Для типовой печатной формы документа почти всегда правильнее именованные области в макете: их проще править нетехническому специалисту, и визуальный редактор показывает результат до запуска.
Проверка результата и типичные ошибки
После создания областей и написания кода проверьте печатную форму на тестовом документе с заполненными данными. Убедитесь, что шапка выводится один раз, строки табличной части — по количеству позиций, итоги считаются корректно, а параметры не остаются пустыми.
Как проверить результат
При выделении строк области отображается заданное имя
Имя пустое или область не подсвечена — имя не назначено
Область получена, печатная форма формируется
Ошибка «Область не найдена» — опечатка в имени или область удалена
Все поля формы заполнены данными документа
Пустые ячейки или текст [ИмяПараметра] — параметр не заполнен из кода
Строк столько же, сколько позиций в документе
Строки дублируются или отсутствуют — ошибка в цикле
Отдельная категория проблем — работа с типовыми конфигурациями на поддержке. Изменение типового макета затрудняет обновление конфигурации: при очередном обновлении правки могут быть потеряны или потребуют ручного сравнения. Безопаснее создавать внешнюю печатную форму или добавлять собственный макет, оставляя типовой без изменений.
Практические рекомендации по структуре макета
Опытные разработчики придерживаются единой схемы именования областей внутри одной конфигурации: Шапка, ШапкаТаблицы, Строка, Итого, Подвал. Это упрощает чтение чужого кода и копирование печатных форм между документами.
Для сложных форм с несколькими вариантами строк (товар, услуга, набор) создавайте отдельные области под каждый вариант: СтрокаТовар, СтрокаУслуга. В коде выбирайте нужную область по типу строки — это прозрачнее, чем одна универсальная область с условным форматированием.
Если строка табличной части может не поместиться на странице, используйте метод ПроверитьВывод() перед Вывести() и при необходимости выводите область повторения шапки таблицы на новой странице. Это стандартный приём для длинных накладных.
Также полезно держать в макете служебную область с описанием параметров — комментарий в скрытой строке, где перечислены все параметры каждой области. При сопровождении через полгода это экономит значительное время.
Что важно запомнить
Область создаётся выделением строк или ячеек и командой «Таблица — Имена — Назначить имя» (Ctrl+Shift+N). Из кода область получают через ПолучитьОбласть(), заполняют параметры и выводят методом Вывести(). Используйте осмысленные имена, проверяйте совпадение имён в макете и коде, а правки рабочей базы выполняйте только после резервного копирования.
Частые вопросы
Как создать область из нескольких несмежных диапазонов?
Никак — именованная область в табличном документе 1С должна быть непрерывным диапазоном строк или прямоугольником ячеек. Если нужны несмежные фрагменты, создайте несколько отдельных областей и выводите их последовательно из кода.
Можно ли создать область в пользовательском режиме, без конфигуратора?
Нет, именованные области макета создаются только в конфигураторе. В режиме «1С:Предприятие» пользователь может редактировать печатную форму перед выводом на принтер, но эти изменения не сохраняются в макет и не создают областей для программного доступа.
Почему ПолучитьОбласть() возвращает ошибку, хотя область есть?
Чаще всего причина в опечатке или лишнем пробеле в имени, реже — в том, что код обращается к другому макету (например, к общему вместо макета объекта). Проверьте имя через меню «Таблица — Имена» и сверьте его посимвольно со строкой в коде.
Как вывести область не в конец документа, а в середину?
Метод Вывести() всегда добавляет область вниз. Для вставки в произвольное место используйте метод ВставитьОбласть() с указанием целевой области результирующего документа, либо формируйте документ в правильном порядке с самого начала — это проще и надёжнее.
Чем область макета отличается от области результирующего табличного документа?
Область макета — это шаблон, из которого копируются фрагменты. После вывода в результирующий документ создаётся новая область уже в нём; её можно найти методом НайтиТекст() или по координатам и, например, задать расшифровку для интерактивного отчёта.
Есть ли ограничение на количество областей в одном макете?
Жёсткого практического ограничения, с которым сталкиваются на реальных формах, нет — макеты со множеством областей работают штатно. Однако чрезмерное дробление (отдельная область на каждую ячейку) усложняет сопровождение; разумный минимум — области по смысловым блокам формы.