Часто в процессе разработки прикладных решений на платформе 1С:Предприятие 7.7 возникает задача улучшения эргономики интерфейса. Одной из типичных просьб пользователей является автоматическое позиционирование курсора на последней добавленной записи при открытии формы списка справочника. Это позволяет менеджеру сразу видеть актуальные данные без лишних манипуляций с полосой прокрутки.
В ходе обсуждения мы выяснили, что первоначальная попытка решения задачи через цикл Пока с полным перебором всего справочника является крайне неоптимальной. Такой метод создает избыточную нагрузку на базу данных и существенно замедляет открытие формы, особенно если в справочнике тысячи элементов. Мы рекомендуем отказаться от перебора всех записей в пользу методов прямого доступа к данным.
Для того чтобы быстро получить последнюю запись, не нагружая систему, воспользуемся возможностью 1С 7.7 перевернуть порядок выборки элементов. Для этого применяются методы ОбратныйПорядок(1) и ПолучитьЭлемент(). Рассмотрим пошаговую реализацию:
Справочник с нужным видом.АктивизироватьОбъект.Приведем пример программного кода, который реализует данный алгоритм:
// Инициализируем объект справочника
Спр = СоздатьОбъект("Справочник." + Вид());
// Включаем обратный порядок, чтобы первым элементом выборки был последний
Спр.ОбратныйПорядок(1);
// Выполняем выборку элементов
Спр.ВыбратьЭлементы();
// Получаем первый элемент в обратной выборке (фактически последний в справочнике)
Если Спр.ПолучитьЭлемент() = 1 Тогда
// Активизируем найденный элемент в форме списка
АктивизироватьОбъект(Спр.ТекущийЭлемент());
КонецЕсли;
При работе с иерархическими справочниками или специфической сортировкой необходимо учитывать следующие моменты:
ИспользоватьИерархию(0) перед началом выборки.ОбратныйПорядок(1) работает в контексте текущего порядка сортировки, установленного для справочника.АктивизироватьОбъект является самым стабильным и корректным способом установки фокуса на нужную строку в табличном поле 1С 7.7. Использование эмуляции нажатия клавиш через SendKeys (например, нажатие клавиши «END») является крайне нерекомендуемым «костылем», так как его надежность зависит от готовности интерфейса к моменту выполнения команды.Несмотря на техническую возможность реализации, проанализируем ситуацию с точки зрения пользователя. Принудительный скроллинг к концу списка каждый раз при открытии формы может быть удобен при вводе новых данных, но в других сценариях он может раздражать опытных пользователей, которые привыкли к сохранению контекста работы. Рассмотрите возможность сохранения последнего выбранного пользователем элемента через механизмы СохранитьЗначение и ВосстановитьЗначение. Это позволит системе «запоминать» привычки пользователя, что зачастую является более профессиональным подходом к проектированию интерфейсов.
Таким образом, использование метода АктивизироватьОбъект в связке с ОбратныйПорядок(1) является лучшим решением для реализации поставленной задачи в среде 1С:Предприятие 7.7.