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