Фиксация строк и колонок в 1С: пользователю, конфигуратору и коду

· 9 мин

Содержание

Закрепить строку в 1С можно тремя путями, и выбор зависит от того, где вы работаете. В готовом отчёте или табличном документе область закрепляют командой в самой форме: встаёте в ячейку под нужной строкой и справа от нужной колонки, выбираете закрепление. В Конфигураторе фиксацию задают в макете. В коде её выставляют свойствами ФиксацияСверху и ФиксацияСлева.

Ниже по порядку: что закрепляется и как это работает, способ для пользователя, макет в Конфигураторе, программная фиксация, отчёты на СКД и сводная таблица методов. В конце — ошибки, из-за которых закрепление «не держится».

Что именно закрепляется и как это работает

Фиксация в 1С работает не по отдельной строке, а по области: всё, что выше и левее выбранной ячейки, остаётся на месте при прокрутке. Закрепить только третью строку, не закрепив первые две, нельзя. Закрепляется всегда блок, начиная от верхнего левого угла документа.

Из этого следуют два правила:

  • 📌 чтобы закрепить шапку из трёх строк, нужно закрепить три верхние строки целиком;
  • 📌 чтобы закрепить колонку с наименованием, фиксируются все колонки слева от границы, включая нумерацию.

Закрепление хранится как два числа: сколько строк зафиксировано сверху и сколько колонок слева. Это числа в самом табличном документе. Поэтому они сохраняются вместе с макетом, а в сформированном отчёте их приходится выставлять заново при каждом формировании.

Закрепление действует только в режиме просмотра на экране. На печать и в файл Excel оно не влияет: при выгрузке в Excel закрепление может не перенестись, это зависит от способа сохранения.

Закрепить строку в режиме пользователя

Этот способ нужен, когда отчёт уже сформирован и вы листаете длинную таблицу: оборотно-сальдовую ведомость, карточку счёта, список номенклатуры в виде отчёта.

  1. Сформируйте отчёт, чтобы шапка таблицы была на экране.
  2. Поставьте курсор в ячейку первой строки данных, то есть сразу под шапкой, и в той колонке, справа от которой хотите оставить закреплённую часть. Если колонки фиксировать не нужно, выберите ячейку в самой левой колонке.
  3. В командной панели формы отчёта откройте меню «Еще» и найдите команду закрепления области. В других формах табличных документов то же действие бывает в контекстном меню правой кнопкой мыши.
  4. Прокрутите отчёт вниз. Шапка должна остаться на месте, под ней пойдут строки данных.

Чтобы снять закрепление, вызовите ту же команду повторно: пункт сменится на отмену закрепления.

Если команды в меню нет, значит, форма не использует стандартный табличный документ или команда скрыта настройкой интерфейса. В таком случае сначала проверьте режим отображения: в некоторых формах отчёта закрепление есть только в одном из режимов формирования.

Закрепление, сделанное пользователем в готовом отчёте, обычно не сохраняется после повторного формирования. Отчёт строится заново, и зафиксированная область сбрасывается. Если шапка нужна закреплённой всегда, задайте фиксацию в настройках отчёта или в коде (разделы ниже).

Какая ячейка выбирается в разных сценариях

Что нужно закрепитьГде поставить курсор
Одну строку шапкиВ любую ячейку второй строки, колонка не важна
Шапку из трёх строкВ любую ячейку четвёртой строки
Только первую колонкуВ первую строку, во вторую колонку
Шапку и первую колонкуВо вторую строку, во вторую колонку

Правило запоминается просто: курсор стоит на первой «прокручиваемой» ячейке. Всё выше и левее неё закрепляется.

Фиксация в Конфигураторе: макеты и формы

Для разработчика и для администратора с доступом к Конфигуратору есть два места, где закрепление задаётся постоянно.

Макет табличного документа

Откройте макет (например, макет печатной формы или макет отчёта) и поставьте курсор в нужную ячейку по тому же правилу: первая прокручиваемая ячейка. В главном меню Конфигуратора откройте пункт «Таблица» и найдите команду закрепления областей. Зафиксированная область запомнится вместе с макетом.

Практический нюанс: для печатных форм закрепление обычно не нужно, макет печатается постранично. Для табличных документов, которые пользователь листает на экране, оно полезно. Типичный пример — длинная ведомость, которую формирует обработка.

Формы с таблицами и списками

В формах списков (справочники, журналы документов) заголовок таблицы при вертикальной прокрутке остаётся виден сам: его не нужно закреплять. Отдельный вопрос — горизонтальная прокрутка широких списков, когда хочется оставить на месте колонку с наименованием. Свойства таблицы формы открываются двойным щелчком на таблице в редакторе формы. Если нужное свойство вы не нашли по названию, не гадайте: проще вынести ключевую информацию в первые колонки и скрыть лишние через настройку списка пользователем.

Для широких списков пользователю обычно проще настроить видимость колонок: правый щелчок по заголовку таблицы и выбор отображаемых колонок. Лишнее скрывается, и горизонтальная прокрутка не нужна.

Программная фиксация табличного документа

Когда отчёт или обработка строится кодом и выводит результат в ТабличныйДокумент, закрепление задают свойствами этого документа. Их два:

  • ФиксацияСверху — число закреплённых строк сверху;
  • ФиксацияСлева — число закреплённых колонок слева.

Базовый пример: шапка в три строки и первая колонка.

ТабДок = Новый ТабличныйДокумент;

// ... вывод шапки и данных в ТабДок ...

ТабДок.ФиксацияСверху = 3;
ТабДок.ФиксацияСлева = 1;

Ключевой момент — порядок действий. Закрепление имеет смысл выставлять после того, как область выведена. Если установить значения до вывода в документ, область, которой ещё нет, закрепиться не может, и результат на экране может оказаться неожиданным.

Чтобы убрать закрепление, присвойте обоим свойствам ноль:

ТабДок.ФиксацияСверху = 0;
ТабДок.ФиксацияСлева = 0;

Как не ошибиться с числом строк

Число в ФиксацияСверху — это именно количество строк от верха документа, а не номер строки. Если шапка начинается не с первой строки (над ней заголовок отчёта, строка с периодом и отбором), считать надо вместе с ними.

Надёжный способ: запомнить номер последней строки шапки сразу после её вывода и использовать его.

// После вывода последней строки шапки
ПоследняяСтрокаШапки = ТабДок.ВысотаТаблицы;
// ... вывод строк данных ...
ТабДок.ФиксацияСверху = ПоследняяСтрокаШапки;

Так число не придётся править, когда в шапку добавят ещё одну строку.

Пример: ведомость с заголовком и двухстрочной шапкой

Допустим, обработка выводит ведомость: первая строка — название, вторая — период, третья пустая, четвёртая и пятая — шапка таблицы. Закрепить нужно шапку, чтобы названия колонок не пропадали при прокрутке на сотни строк. Значит, ФиксацияСверху равно пяти, а не двум: считаются все строки сверху, включая название, период и пустую.

Если такая «лишняя» область сверху мешает, уберите из вывода пустую строку и объедините заголовок с периодом в одну строку. Закрепляемый блок сократится, а на экране останется больше места под данные. Пересчитайте число после любой правки макета вывода: именно здесь чаще всего получают шапку, обрезанную на строку.

Куда вписать код в готовом отчёте

В отчёте формы есть обработчик, который выполняется после формирования результата. Туда и добавляют две строки с фиксацией, обращаясь к табличному документу результата. Это работает для отчётов, где результат выводится в поле формы типа табличный документ. Если отчёт устроен иначе, начните с поиска того места, где результат присваивается полю формы.

Правки кода в типовой конфигурации делают через расширение, а не прямым изменением типового модуля: иначе при обновлении изменение придётся переносить вручную.

Закрепление в отчётах на СКД

Система компоновки данных сама строит результат и сама решает, как выводить шапку. Отдельной настройки «закрепить шапку» в обычном варианте отчёта нет, поэтому есть два пути.

Путь первый — после компоновки. Результат СКД выводится в табличный документ процессором вывода. Когда вывод закончен, в документе выставляют ФиксацияСверху по тому же принципу, что и выше. Число строк в шапке при этом нужно вычислить: оно зависит от того, есть ли строка заголовка отчёта, строка с периодом и группировки. Для стабильной шапки лучше задать структуру отчёта, в которой число строк шапки не меняется.

Путь второй — переопределить формирование. Если нужно закрепление во всех отчётах организации, его добавляют в общий код формирования результата. Это решение для разработчика, не для пользователя.

Нюансы, на которых спотыкаются чаще всего:

  • 🔸 если пользователь добавляет или убирает поля в вариант отчёта, число строк шапки меняется, а зафиксированное число остаётся прежним;
  • 🔸 при выводе нескольких таблиц на один лист (несколько группировок «в разные стороны») закрепить можно только верхний левый блок;
  • 🔸 разворачивание и сворачивание группировок не влияет на закрепление, но у вертикальной прокрутки меняется длина.

Для пользовательских отчётов в режиме предприятия проще всего ориентироваться на вариант: если такого закрепления нет, а оно нужно, это повод передать задачу разработчику, а не искать скрытую кнопку.

Сравнение методов фиксации

МетодКто делаетСохраняется лиКогда применять
Команда в форме отчётаПользовательНет, сбрасывается при повторном формированииРазово просмотреть длинную таблицу
Закрепление в макетеРазработчик, КонфигураторДа, хранится в макетеПостоянные экранные таблицы на макетах
Свойства ФиксацияСверху и ФиксацияСлева в кодеРазработчикДа, при каждом формированииОтчёты и обработки, выводящие табличный документ
Выставление после компоновки СКДРазработчикДа, при каждом формированииОтчёты на СКД со стабильной шапкой
Настройка видимости колонок в спискеПользовательДа, в настройках пользователяШирокие списки вместо горизонтальной прокрутки

Если закрепление не работает

Проверьте по порядку, это самые частые причины.

  1. Закрепилась не та область. Курсор стоял на самой шапке, а не под ней. Поставьте курсор на первую строку данных и повторите.
  2. Закрепилось слишком много. Курсор стоял далеко от верхнего левого угла. Снимите закрепление и сделайте заново.
  3. Закрепление пропало после обновления отчёта. Это нормальное поведение: отчёт построен заново. Нужна программная фиксация.
  4. Шапка «уехала» вместе с таблицей. Свойство задано до вывода данных. Перенесите присваивание в конец формирования.
  5. Закреплено правильное число, но шапка не помещается. Если шапка занимает почти весь экран , под данные остаётся одна-две строки. Уменьшите высоту шапки или не закрепляйте её целиком.
  6. Закрепление есть, но при выгрузке в Excel его нет. Закрепление в табличном документе и в Excel — разные настройки; после выгрузки закрепите область в самом Excel.

Не закрепляйте больше трети высоты экрана. На небольшом мониторе фиксированная область съест пространство, и работать с прокручиваемой частью станет неудобно.

Где вам нужно закрепить строку?

Частые вопросы

Можно ли закрепить только одну строку, не трогая верхние?
Нет. Закрепляется блок от верхнего левого угла. Чтобы зафиксировать третью строку, придётся зафиксировать и две верхние.
Почему закрепление исчезает при повторном формировании отчёта?
Отчёт строится заново, и состояние закрепления у нового результата начальное. Постоянное закрепление задаётся в коде или в макете.
Как закрепить сразу и строки, и колонки?
Поставьте курсор в ячейку на пересечении: первая прокручиваемая строка и первая прокручиваемая колонка. В коде это одновременно ФиксацияСверху и ФиксацияСлева.
Закрепляется ли шапка при печати?
Нет. Закрепление действует только на экране. Повтор шапки на каждой странице при печати настраивается отдельно, через повторяемые строки печатной формы.
Можно ли снять закрепление из кода?
Да, присвойте ФиксацияСверху и ФиксацияСлева значение ноль.
Нужно ли закреплять шапку в справочниках и журналах документов?
Нет, заголовок таблицы списка остаётся на месте при прокрутке и без настройки.