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