Каталог решений - [ОБУЧАЛОВКА] Позиционирование на последнем элементе списка справочника

[ОБУЧАЛОВКА] Позиционирование на последнем элементе списка справочника

[ОБУЧАЛОВКА] Позиционирование на последнем элементе списка справочника

В наличии

Для журналов можно задать режим отображения при открытии журнала (в режиме 1С:Предприятие): Меню — Сервис — Параметры-Журналы — "При открытии жирнала переходить в конец = вКл". Вопрос: почему нельзя задать такой вариант для справочников?

Категория:

Описание

Причин сильно доискиваться не будем, попытаемся (чисто в качестве упражнения) реализовать данную «хотелку».

Например, у нас есть одноуровневый справочник. Как при открытии его списка спозиционироваться в конец списка…? Делаем так:

В форме списка в процедуре ПриОткрытии() размещаем такой код:

 

Процедура ПриОткрытии()
   //спозиционируемся на последнем элементе справочника
   глАктивизироватьПоследний(Контекст);
КонецПроцедуры //ПриОткрытии()


В глобальном модуле определим следующий код:

 

//******************************************************************************
//не мое, единственный способ определения типа контекста
Функция глВернутьТипКонтекста(Знач Конт) Экспорт
  ТипКонтекста="Справочник.ФормаСпискаДокументЖурналОтчет";
   
  Попытка А=Конт.ТекущийЭлемент();
  Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,"Справочник","");
  КонецПопытки;
   
  Попытка А=Конт.ИерархическийСписок();
  Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,".ФормаСписка","");
  КонецПопытки;
   
  Попытка А=Конт.Проведен();
  Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,"Документ","");
  КонецПопытки;
   
  Попытка А=Конт.ТекущийДокумент;
  Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,"Журнал","");
  КонецПопытки;
   
  Попытка Конт.РасположениеФайла(А,А);
  Исключение ТипКонтекста=СтрЗаменить(ТипКонтекста,"Отчет","");
  КонецПопытки;
   
  Возврат ТипКонтекста;
КонецФункции //глВернутьТипКонтекста()

//******************************************************************************
//позиционирование на последнем элементе списка справочника
Процедура глАктивизироватьПоследний(Знач Конт) Экспорт
 Перем Спр;
 
 Если глВернутьТипКонтекста(Конт)"Справочник.ФормаСписка"
 Тогда //только для справочников!
  Возврат;
 КонецЕсли;
 
 //спозиционируемся на последнем элементе справочника
 Спр = СоздатьОбъект("Справочник."+Конт.Вид());
 
 Реквизит = Конт.Сортировка();
 Если Реквизит = "Код" Тогда Спр.ПорядокКодов();
 ИначеЕсли Реквизит = "Наименование" Тогда Спр.ПорядокНаименований();
 Иначе Спр.ПорядокРеквизита(Реквизит);
 КонецЕсли;
 
 Спр.ОбратныйПорядок(1);
 Спр.ВыбратьЭлементы(0);
 Спр.ПолучитьЭлемент();
 
 Если Спр.Выбран()=0
 Тогда //нет на чем позиционироваться!
  Возврат;
 КонецЕсли;
 
 Конт.АктивизироватьОбъект(Спр.ТекущийЭлемент());
 Спр = "";
КонецПроцедуры //глАктивизироватьПоследний()


Пояснения к коду  глАктивизироватьПоследний():
— проверяем тип контекста;
— определяем пользовательский выбор режима сортировки открытого списка;
— инициализируем выборку справочника нужного вида в обратном порядке, т.е. с конца (в порядке сортировки списка!); тут важно открыть выборку без учета иерархии — это условие обеспечивает работу в подчиненных справочниках!!!
— получаем первый элемент выборки в обратном порядке, т.е. последний элемент списка;
— позиционируемся на нем в списке справочника.

Для чего нужны такие «выкрутасы»? Все очень просто, например, если в справочнике содержится запись неких действий (лог), или некая хронологическая последовательность — зачастую интересуют последние сведения, которые находятся в конце списка…

Если кто-то знает более «красивый» способ спозиционироваться на последнем элементе списка (без привлечения внешних компонент, эмуляции клавиш и т.п.) — просьба озвучить…

has been added to your cart:
Оформление заказа