Сортировка в справочнике по убыванию кода

  • Автор темы NataTr
  • Дата начала
N

NataTr

Гость
#1
Как установить в справочнике сортировку по убыванию кода или чтобы при открытии справочника происходило позиционирование на последний элемент?
 
L

LSH

Гость
#2
Видимо, стандартной процедурой "Сортировка()" тут не обойтись.

Можно выпендриться и сделать так:
1. Создать реквизит справочника типа Строка/Число (в зависимости от того, какой тип у Кода) с признаком "Сортировка"
2. При записи элемента записывать туда (Максимально_Возможное_Число - Число(Код)). То есть, если у нас Код - тип Число, длина 5, то в этот реквизит записывать=:
Код: 1
Реквизит: 99999

Код: 2
Реквизит: 99998

Код: 3
Реквизит: 99997

и т.п.

А дальше просто делаем сортировку по этому реквизиту и у нас получается обратная сортировка по коду.
А вот как спозиционироваться на последний:
СпрТ = СоздатьОбъект("Справочник.Товары");
СпрТ.ПорядокКодов();
СпрТ.ОбратныйПорядок(1);
СпрТ.ВыбратьЭлементы();
СпрТ.ПолучитьЭлемент(); //<< вот он, последний.

Можно конечно это оптимизировать, но думать лень сейчас :)
 
N

NataTr

Гость
#5
Идея вроде бы правильная, только не работает. Вставила в блок модуля формы списка справочника. Теперь он выглядит так:
//_____________________________________________________________________________
Процедура ПриОткрытии() //предопределенная

Спр=СоздатьОбъект("Справочник.Изделия");
Спр.ПорядокКодов();
Спр.ОбратныйПорядок(1);
Спр.ВыбратьЭлементы();
Спр.ПолучитьЭлемент(); //<< вот он, последний.

Активизировать("Наименование",0);
КонецПроцедуры //ПриОткрытии

Но при открытии Справочника все равно курсор на первом элементе, а хочу на последнем, чтобы видеть, что было записано последним, а не бог знает когда....
 
L

LSH

Гость
#6
Идея вроде бы правильная, только не работает. Вставила в блок модуля формы списка справочника. Теперь он выглядит так:
//_____________________________________________________________________________
Процедура ПриОткрытии() //предопределенная

Спр=СоздатьОбъект("Справочник.Изделия");
Спр.ПорядокКодов();
Спр.ОбратныйПорядок(1);
Спр.ВыбратьЭлементы();
Спр.ПолучитьЭлемент(); //<< вот он, последний.

Активизировать("Наименование",0);
КонецПроцедуры //ПриОткрытии
Идея правильная, только исполнена некорректно.


Процедура ПриОткрытии() //предопределенная

Спр=СоздатьОбъект("Справочник.Изделия");
Спр.ПорядокКодов();
Спр.ОбратныйПорядок(1);
Спр.ВыбратьЭлементы();
Спр.ПолучитьЭлемент(); //<< вот он, последний.

АктивизироватьОбъект(Спр.ТекущийЭлемент());
КонецПроцедуры //ПриОткрытии