Разработка и Конфигурация · 10 мин
Как задать область в 1С: пошаговое руководство
Как задать область в 1С: создание именованных областей в макете табличного документа, вывод областей программно, работа с областями в запросах и типичные ошибки.
Понятие «область» в 1С встречается в нескольких контекстах, и от того, где именно нужно задать область, зависит порядок действий. Чаще всего под областью понимают именованный фрагмент макета табличного документа — например, «Шапка», «Строка» или «Подвал» печатной формы. Реже вопрос касается областей в запросах (область видимости таблиц) или областей данных в режиме сервиса.
В этой статье разобран основной сценарий — создание и вывод именованных областей в макете табличного документа, поскольку именно с ним сталкивается большинство разработчиков и продвинутых пользователей при настройке печатных форм. Дополнительно рассмотрены смежные задачи: получение области программно, параметры областей и типичные ошибки.
Все действия описаны для управляемого приложения на платформе 1С:Предприятие 8.3. В обычном приложении механика аналогична, отличается только внешний вид конфигуратора.
Что такое область в макете табличного документа
Макет табличного документа — это шаблон, из которого программа формирует печатные формы: счета, акты, накладные, отчёты. Макет состоит из областей — именованных фрагментов, которые можно многократно выводить в итоговый документ, подставляя в них данные.
Области бывают двух типов. Область строк включает целые строки макета (например, строки 1–3 для шапки документа). Область ячеек охватывает прямоугольный диапазон ячеек и используется, когда нужно выводить фрагменты по горизонтали — например, колонки кросс-отчёта. Тип области определяется способом выделения: если выделены строки целиком через заголовки строк — создаётся область строк, если выделен диапазон ячеек — область ячеек.
Как создать именованную область в конфигураторе
Откройте конфигуратор 1С и найдите нужный макет. Макеты печатных форм обычно хранятся в ветке «Общие → Макеты» либо внутри объекта (например, документ «Реализация товаров и услуг» → Макеты). Двойной щелчок открывает макет на редактирование.
Выделите строки, которые должны войти в область. Для области строк щёлкните по заголовку первой строки и, удерживая Shift, щёлкните по заголовку последней строки — строки подсветятся целиком. Затем выполните команду меню «Таблица → Имена → Назначить имя» или нажмите Ctrl+Shift+N. В появившемся окне введите имя области, например «Шапка», и подтвердите ввод.
Имя области должно начинаться с буквы и не содержать пробелов и спецсимволов — фактически действуют те же правила, что и для имён переменных встроенного языка. После назначения слева от строк появится маркер с именем области. Одинаковых имён в одном макете быть не может.
- 1Откройте макет табличного документа в конфигураторе
- 2Выделите нужные строки через заголовки строк (или диапазон ячеек для области ячеек)
- 3Нажмите Ctrl+Shift+N или выберите «Таблица → Имена → Назначить имя»
- 4Введите имя области без пробелов и спецсимволов
- 5Сохраните макет и проверьте наличие имени в списке «Таблица → Имена → Имена»
Как получить и вывести область программно
После того как область задана в макете, с ней работают из кода. Сначала получают сам макет, затем из него извлекают область, заполняют параметры и выводят в результирующий табличный документ.
Типовой фрагмент кода выглядит так:
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("МакетПечати");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = НомерДок;
ОбластьШапка.Параметры.ДатаДокумента = Формат(ДатаДок, "ДЛФ=D");
ТабДок.Вывести(ОбластьШапка);
Метод ПолучитьОбласть("Шапка") возвращает копию области из макета. Обращение к параметрам выполняется через коллекцию Параметры — имена параметров задаются в свойствах ячеек макета в поле «Заполнение» (значение «Параметр») и в поле «Параметр». Метод Вывести() добавляет область в конец формируемого документа, а Присоединить() присоединяет её справа — это используется для областей ячеек в кросс-отчётах.
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого ТекСтрока Из Товары Цикл
ОбластьСтрока.Параметры.Заполнить(ТекСтрока);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;Параметры и шаблоны внутри области
Ячейки области могут содержать статичный текст, параметры или шаблоны. Тип содержимого задаётся в палитре свойств ячейки в поле «Заполнение». Значение «Текст» — неизменяемая надпись, «Параметр» — значение подставляется из кода, «Шаблон» — текст с вставками параметров в квадратных скобках, например: Счёт № [НомерДок] от [ДатаДок].
Шаблоны удобны, когда в одной ячейке нужно склеить несколько значений — тогда не придётся дробить строку на отдельные ячейки-параметры. Но если значение должно форматироваться программно (например, дата в особом формате), надёжнее использовать параметр и формировать строку в коде.
Частая потребность — вывод одной и той же области в цикле с разными данными. В этом случае область получают один раз до цикла, а внутри цикла только заполняют параметры и выводят. Заполнять параметры удобно методом Параметры.Заполнить(Выборка), если имена полей выборки совпадают с именами параметров.
Области в запросах и других контекстах
Термин «область» встречается и вне макетов. В запросах говорят об области видимости — она определяет, какие таблицы и поля доступны в конкретной части запроса. Задать область видимости в конструкторе запроса означает выбрать таблицы на закладке «Таблицы и поля» и при необходимости назначить им псевдонимы.
В механизме разделения данных (модель сервиса, 1С:Фреш) существует понятие «область данных» — изолированная часть информационной базы для отдельного абонента. Область данных задаётся администратором сервиса и программно переключается методами УстановитьРазделениеСеанса. Обычному пользователю и разработчику прикладного решения с этим механизмом работать не приходится.
Ещё один контекст — область группировки в отчётах на СКД и область ячеек при программной работе с табличным документом через метод Область("R2C3:R5C7"), который позволяет обращаться к диапазону уже сформированного документа по координатам.
Сравнение вариантов
Подходит для шапок, строк табличных частей и подвалов. Выводится методом Вывести() вниз документа.
Используется для колонок кросс-отчётов и боковых фрагментов. Выводится методом Присоединить() вправо.
Метод Область("R1C1") для уже сформированного табличного документа. Гибко, но хрупко при изменении макета.
Как проверить результат и что делать при ошибках
После настройки области сформируйте печатную форму и визуально проверьте результат: все ли параметры заполнены, не съехала ли разметка, не обрезан ли текст в ячейках. Если область не выводится, первым делом проверьте точность имени в коде и в макете — регистр букв значения не имеет, но лишний пробел или опечатка приведут к ошибке «Область не найдена».
Если при выводе области ячеек разметка «разъезжается», убедитесь, что высоты присоединяемых областей совпадают по строкам с уже выведенной частью. Для отладки удобно временно выводить значения параметров в отдельную служебную область или использовать отладчик с точкой останова перед методом Вывести().
Как проверить результат
Имена совпадают посимвольно, область выводится
Ошибка «Область не найдена» при формировании
Все поля печатной формы содержат данные
Пустые ячейки там, где должны быть значения
Каждая строка содержит свои данные
Во всех строках дублируются данные последней записи
Часто задаваемые вопросы
Можно ли задать область в 1С без конфигуратора?
Частично. В пользовательском режиме можно редактировать макеты печатных форм через механизм «Администрирование → Печатные формы, отчёты и обработки → Макеты печатных форм», если он включён в конфигурации. Там доступно редактирование содержимого, но полноценное управление именованными областями удобнее выполнять в конфигураторе.
Как удалить область из макета?
Выделите строки области, откройте «Таблица → Имена → Имена», найдите нужное имя в списке и удалите его. Либо выделите строки области и назначьте им пустое имя. Сами строки при этом останутся в макете — удаляется только именование.
Почему метод Присоединить() выводит область не туда?
Присоединить() добавляет область справа от последней выведенной строки. Если перед этим выводились области разной высоты или документ пуст, результат будет непредсказуемым. Контролируйте порядок: сначала выведите левую часть через Вывести(), затем присоединяйте области ячеек одинаковой высоты.
Как обратиться к ячейке сформированного документа без области макета?
Используйте метод ТабличныйДокумент.Область() с адресом в формате R1C1, например ТабДок.Область("R3C5").Текст = "Значение". Учтите, что при изменении структуры макета координаты сместятся, поэтому такой способ применяют для точечных правок, а не для построения формы.
Можно ли вкладывать области друг в друга?
Именованные области макета не поддерживают вложенность — каждая область занимает свой непересекающийся диапазон строк. Если нужна сложная структура, разбейте макет на несколько смежных областей и выводите их последовательно в коде.
Что важно запомнить
Область в макете задаётся выделением строк и командой «Назначить имя» (Ctrl+Shift+N). В коде область получают методом ПолучитьОбласть(), заполняют параметры и выводят через Вывести() или Присоединить(). Имена в макете и коде должны совпадать, а типовые макеты лучше не править напрямую — используйте копии или расширения.