[ОБУЧАЛОВКА] Позиционирование на последнем элементе списка справочника
Для журналов можно задать режим отображения при открытии журнала (в режиме 1С:Предприятие): Меню — Сервис — Параметры-Журналы — "При открытии жирнала переходить в конец = вКл". Вопрос: почему нельзя задать такой вариант для справочников?
- Описание
- Подробнее
Описание
Причин сильно доискиваться не будем, попытаемся (чисто в качестве упражнения) реализовать данную «хотелку».
Например, у нас есть одноуровневый справочник. Как при открытии его списка спозиционироваться в конец списка…? Делаем так:
В форме списка в процедуре ПриОткрытии() размещаем такой код:
Процедура ПриОткрытии()
//спозиционируемся на последнем элементе справочника
глАктивизироватьПоследний(Контекст);
КонецПроцедуры //ПриОткрытии()
В глобальном модуле определим следующий код:
//******************************************************************************
//не мое, единственный способ определения типа контекста
Функция глВернутьТипКонтекста(Знач Конт) Экспорт
ТипКонтекста="Справочник.ФормаСпискаДокументЖурналОтчет";
Попытка А=Конт.ТекущийЭлемент();
Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,"Справочник","");
КонецПопытки;
Попытка А=Конт.ИерархическийСписок();
Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,".ФормаСписка","");
КонецПопытки;
Попытка А=Конт.Проведен();
Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,"Документ","");
КонецПопытки;
Попытка А=Конт.ТекущийДокумент;
Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,"Журнал","");
КонецПопытки;
Попытка Конт.РасположениеФайла(А,А);
Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,"Отчет","");
КонецПопытки;
Возврат ТипКонтекста;
КонецФункции //глВернутьТипКонтекста()
//******************************************************************************
//позиционирование на последнем элементе списка справочника
Процедура глАктивизироватьПоследний(Знач Конт) Экспорт
Перем Спр;
Если глВернутьТипКонтекста(Конт)"Справочник.ФормаСписка"
Тогда //только для справочников!
Возврат;
КонецЕсли;
//спозиционируемся на последнем элементе справочника
Спр = СоздатьОбъект("Справочник."+Конт.Вид());
Реквизит = Конт.Сортировка();
Если Реквизит = "Код" Тогда Спр.ПорядокКодов();
ИначеЕсли Реквизит = "Наименование" Тогда Спр.ПорядокНаименований();
Иначе Спр.ПорядокРеквизита(Реквизит);
КонецЕсли;
Спр.ОбратныйПорядок(1);
Спр.ВыбратьЭлементы(0);
Спр.ПолучитьЭлемент();
Если Спр.Выбран()=0
Тогда //нет на чем позиционироваться!
Возврат;
КонецЕсли;
Конт.АктивизироватьОбъект(Спр.ТекущийЭлемент());
Спр = "";
КонецПроцедуры //глАктивизироватьПоследний()
Пояснения к коду глАктивизироватьПоследний():
— проверяем тип контекста;
— определяем пользовательский выбор режима сортировки открытого списка;
— инициализируем выборку справочника нужного вида в обратном порядке, т.е. с конца (в порядке сортировки списка!); тут важно открыть выборку без учета иерархии — это условие обеспечивает работу в подчиненных справочниках!!!
— получаем первый элемент выборки в обратном порядке, т.е. последний элемент списка;
— позиционируемся на нем в списке справочника.
Для чего нужны такие «выкрутасы»? Все очень просто, например, если в справочнике содержится запись неких действий (лог), или некая хронологическая последовательность — зачастую интересуют последние сведения, которые находятся в конце списка…
Если кто-то знает более «красивый» способ спозиционироваться на последнем элементе списка (без привлечения внешних компонент, эмуляции клавиш и т.п.) — просьба озвучить…