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

14.07.09

Разработка - Работа с интерфейсом

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

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

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

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

 

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


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

 

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

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


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

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

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

См. также

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Создание и использование на формах в среде 1С 7.7 прогрессбара, индикатора, как в 1С 8.Х для контроля над длительными процессами. Реализовано средствами языка программирования 1С 7.7.

1 стартмани

06.06.2024    707    1    user1416274    17    

2

Работа с интерфейсом Логистика, склад и ТМЦ Системный администратор Программист Пользователь Платформа 1С v7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".

5000 руб.

18.10.2022    5848    1    45    

4

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v7.7 Абонемент ($m)

Обработка с фрагментами кода для программного использования набора цветов из коллекции WebЦвета 1с версии 8+ в 1с версии 77. Требуется предварительное подключение сторонней библиотеки FormEх. Будет полезно программистам 1с 77, 1с 8. Да и вообще при программировании на любом языке при потребности использовать коллекцию цветов WebЦвета.

1 стартмани

30.03.2022    4962    2    igor7777    4    

6

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Публикация имеет цель обратить внимание на возможность улучшения интерфейса.

15.12.2021    4836    71    Cерый    13    

7

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Простая и удобная внешняя обработка для выбора цвета без применения внешних компонент.

1 стартмани

09.06.2020    7419    4    vap_pig    5    

4

Учет рабочего времени Работа с интерфейсом Программист Бухгалтер Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Обработка производственного календаря с возможностью импорта и экспорта xls для 1С 7.7 (7.70.027) без изменения конфигурации.

1 стартмани

18.09.2019    12996    6    Jill    8    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Арчибальд 2709 30.06.09 09:13 Сейчас в теме
Раз уж мы все равно лезем в модуль формы списка, чего бы нам не вставить в конец процедуры ПриОткрытии() код

//спозиционируемся на последнем элементе справочника
Спр = СоздатьОбъект("Справочник."+Вид());

Реквизит = Сортировка();
Если Реквизит = "Код" Тогда Спр.ПорядокКодов();
ИначеЕсли Реквизит = "Наименование" Тогда Спр.ПорядокНаименований();
Иначе Спр.ПорядокРеквизита(Реквизит);
КонецЕсли;

Спр.ОбратныйПорядок(1);
Спр.ВыбратьЭлементы();
Спр.ПолучитьЭлемент();

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

Спр = "";
2. Арчибальд 2709 30.06.09 09:26 Сейчас в теме
+1 А публикация метода определения типа контекста - зачет. Правда у тебя это уже было ;))
3. CheBurator 2712 30.06.09 13:05 Сейчас в теме
(2) чтоб каждый раз не писать!
4. Арчибальд 2709 30.06.09 13:21 Сейчас в теме
5. CheBurator 2712 30.06.09 18:29 Сейчас в теме
6. CheBurator 2712 14.07.09 03:13 Сейчас в теме
Важное исправление: в коде выборка д.б.
Спр.ВыбратьЭлементы(0); //для работы в подчиненных справочниках
7. CheBurator 2712 03.08.09 19:00 Сейчас в теме
заметочка: п (6) недостаточен для позиционирования на последнем элементе подчиненного справочника...
8. Арчибальд 2709 03.08.09 19:14 Сейчас в теме
9. CheBurator 2712 03.08.09 19:18 Сейчас в теме
(8) да вообщем-то ничего.. это себе NB - чтобы не забыть внести поправочку...
10. Арчибальд 2709 03.08.09 19:42 Сейчас в теме
(9) Для подчиненного по-моему нужно

Спр.ИспользоватьВладельца(ТекущийЭлемент().Владелец);
Спр.ОбратныйПорядок(1);
Спр.ВыбратьЭлементы(0);//Для учета родителей
Оставьте свое сообщение