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