Как настроить отображение последних строк табличной части при открытии формы в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с объемными документами пользователям часто требуется видеть самые свежие записи, добавленные в конец таблицы, а также сразу понимать общее количество строк без лишней ручной прокрутки. Разберем, как реализовать автоматическую прокрутку табличной части к последним строкам при открытии формы и какие особенности платформы необходимо учитывать.

Ограничения стандартных настроек формы

Проанализируем сначала возможности настройки элементов без программирования. В управляемых формах 1С у элементов, отображающих динамический список, предусмотрено стандартное свойство НачальноеОтображениеСписка, в котором можно выбрать вариант Конец. Однако для таблиц формы, связанных с табличными частями объектов (тип данных ДанныеФормыКоллекция), такого свойства в палитре свойств нет.

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

Программное позиционирование на последней строке

Чтобы видимая область таблицы переместилась вниз, не обязательно вручную высчитывать смещение на несколько строк назад. Достаточно установить свойство элемента формы ТекущаяСтрока на самую последнюю строку коллекции. Платформа 1С автоматически выполнит скролл, и на экране отобразится нижняя часть таблицы вместе с предшествующими строками.

Для управляемых форм привязка к текущей строке выполняется через внутренний идентификатор строки с помощью метода ПолучитьИдентификатор(). Разберем по шагам правильную реализацию с обязательной проверкой на наличие строк, чтобы исключить ошибку выхода индекса за пределы диапазона.

Посмотрим на пример кода клиентского обработчика:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПерейтиКПоследнейСтроке();
КонецПроцедуры

&НаКлиенте
Процедура ПерейтиКПоследнейСтроке()
    КоличествоСтрок = Объект.Товары.Количество();
    
    Если КоличествоСтрок > 0 Тогда
        ПоследняяСтрока = Объект.Товары[КоличествоСтрок - 1];
        Элементы.Товары.ТекущаяСтрока = ПоследняяСтрока.ПолучитьИдентификатор();
    КонецЕсли;
КонецПроцедуры

Рассмотрим важные моменты данного алгоритма:

  1. Проверка количества строк: условие Если КоличествоСтрок > 0 гарантирует, что при открытии нового или пустого документа не возникнет исключительная ситуация.
  2. Индекс последней строки: нумерация элементов в коллекциях 1С начинается с нуля, поэтому индекс последнего элемента равен КоличествоСтрок - 1.
  3. Исполнение на клиенте: позиционирование визуального курсора формы необходимо выполнять в обработчике ПриОткрытии на стороне клиента. Назначение свойства ТекущаяСтрока на сервере (например, в процедуре ПриСозданииНаСервере) часто игнорируется платформой при финальной визуализации формы в тонком или веб-клиенте.

Учет времени отрисовки формы

В сложных формах с большим количеством элементов или при работе через веб-клиент на момент выполнения события ПриОткрытии визуальная сетка таблицы может не успеть завершить расчет геометрических размеров. В такой ситуации прямое присвоение свойства ТекущаяСтрока может не привести к визуальному сдвигу скролла.

Для гарантированного смещения видимой области применим однократное подключение обработчика ожидания с минимальной задержкой. Разберем этот пример:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПодключитьОжидание("ПрокрутитьТаблицуККонцу", 0.1, Истина);
КонецПроцедуры

&НаКлиенте
Процедура ПрокрутитьТаблицуККонцу()
    Количество = Объект.Товары.Количество();
    Если Количество > 0 Тогда
        Элементы.Товары.ТекущаяСтрока = Объект.Товары[Количество - 1].ПолучитьИдентификатор();
    КонецЕсли;
КонецПроцедуры

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

Альтернативные способы решения задачи

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

  1. Вывод количества строк в подвал таблицы: включим свойство Подвал у элемента таблицы формы. Для колонки номера строки в свойство ТекстПодвала можно выводить общее число строк через свойство Объект.Товары.Количество() при открытии и после любого изменения состава строк. Пользователь сразу увидит объем документа без необходимости листать список.
  2. Использование информационной надписи: разместим над табличной частью элемент формы вида Декорация - надпись, выводящий динамический счетчик строк документа.
  3. Добавление новых строк в начало списка: если регламент работы с документом допускает обратный порядок добавления данных, при программном заполнении или переопределении команды добавления строки можно использовать метод Вставить(0) вместо стандартного метода Добавить(). Тогда самые новые записи всегда будут находиться в верхней видимой части таблицы при открытии формы.
← На главную