gifts2017

Быстрый отбор в справочнике по первой букве

Опубликовал Armando Armando (Armando) в раздел Обработки - Обработка справочников

В статье описан способ быстрой организации отбора в списке справочника по первой букве наименования. Механизм легко дотачивается под собственные нужды.
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ  

&НаКлиенте
Процедура УстановитьПометку(Команда)

	Для Каждого Кнопка Из Элементы.ПанельСБуквами.ПодчиненныеЭлементы Цикл
		Кнопка.Пометка = (Команда.Имя = Кнопка.Имя);
	КонецЦикла;

КонецПроцедуры // УстановитьПометку()

&НаСервере
Процедура ПодготовитьДинамическийСписок()

	Список.ПроизвольныйЗапрос = Истина;
	ТекстЗапроса =
	"ВЫБРАТЬ *
	|ИЗ
	|	%ИмяТаблицы% КАК Т
	|{ГДЕ
	|	(ПОДСТРОКА(Т.Наименование, 1, 1) В (&СписокБукв))}";
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%ИмяТаблицы%", Список.ОсновнаяТаблица);
	Список.ТекстЗапроса = ТекстЗапроса;

КонецПроцедуры // ПодготовитьДинамическийСписок()

&НаСервере
Процедура СоздатьПанельСБуквами()

	ПанельСБуквами = Элементы.Вставить("ПанельСБуквами", Тип("ГруппаФормы"), ЭтаФорма, Элементы.Список);
	ПанельСБуквами.Вид = ВидГруппыФормы.КоманднаяПанель;
	
	// кнопка "Все"
	КомандаФормы = Команды.Добавить("Все");
	КомандаФормы.Действие = "УдалитьФильтрПоПервойБукве";
	
	КнопкаФормы = Элементы.Добавить("Все", Тип("КнопкаФормы"), ПанельСБуквами);
	КнопкаФормы.ИмяКоманды = "Все";
	КнопкаФормы.Пометка = Истина;
	
	// кнопки А...Я
	Для Сч = КодСимвола("А") По КодСимвола("Я") Цикл
		
		ИмяКоманды = Символ(Сч);
		Если Найти("Ё,Й,Ъ,Ь", ИмяКоманды) > 0 Тогда
			Продолжить;
		КонецЕсли;
		
		КомандаФормы = Команды.Добавить(ИмяКоманды);
		КомандаФормы.Действие = "УстановитьФильтрПоПервойБукве";
		
		КнопкаФормы = Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ПанельСБуквами);
		КнопкаФормы.ИмяКоманды = ИмяКоманды;
		
	КонецЦикла;

КонецПроцедуры // СоздатьПанельСКнопками()

////////////////////////////////////////////////////////////////////////////////
// КОМАНДЫ МОДУЛЯ 

&НаКлиенте
Процедура УстановитьФильтрПоПервойБукве(Команда)
	
	Буква = Команда.Имя;
	
	СписокБукв = Новый Массив;
	СписокБукв.Добавить(Буква);
	СписокБукв.Добавить(НРег(Буква));
	
	Если Буква = "Е" Тогда
		СписокБукв.Добавить("Ё");
		СписокБукв.Добавить("ё");
	КонецЕсли;
	
	Если Буква = "И" Тогда
		СписокБукв.Добавить("Й");
		СписокБукв.Добавить("й");
	КонецЕсли;
	
	Список.Параметры.УстановитьЗначениеПараметра("СписокБукв", СписокБукв);
	
	УстановитьПометку(Команда);
	
КонецПроцедуры

&НаКлиенте
Процедура УдалитьФильтрПоПервойБукве(Команда)
	
	ПараметрКомпоновкиДанных = Новый ПараметрКомпоновкиДанных("СписокБукв");
	ЗначениеПараметраКомпоновкиДанных = Список.Параметры.НайтиЗначениеПараметра(ПараметрКомпоновкиДанных);
	Если ЗначениеПараметраКомпоновкиДанных = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ЗначениеПараметраКомпоновкиДанных.Использование = Ложь;
	
	УстановитьПометку(Команда);
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ 

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ПодготовитьДинамическийСписок();
	СоздатьПанельСБуквами();
	
КонецПроцедуры // ПриСозданииНаСервере()

Данный текст необходимо вставить в модуль формы списка справочника.

Процедуру "ПриСозданииНаСервере" вручную назначить обработчиком одноименного события формы.
События формы

Если данному событию уже назначен обработчик, то необходимо дополнить его строками процедуры "ПриСозданииНаСервере" из листинга.

Реквизита формы "Список" не должен содержать произвольного запроса. Если список формируется произвольным запросом, то в запрос необходимо дописать условие компоновки:
 {ГДЕ (ПОДСТРОКА(ИмяТаблицы.Наименование, 1, 1) В (&СписокБукв))}
и удалить процедуру "ПодготовитьДинамическийСписок" и все ее вызовы.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
СписокСотрудников.epf
.epf 7,10Kb
12.06.10
144
.epf 7,10Kb 144 Скачать

См. также

Contragent+ 5.0 от 2 500
Подписаться Добавить вознаграждение

Комментарии

1. Евгений Люлюк (Evg-Lylyk) 12.06.10 12:26
Интересная идея. Еще можно в запрос динамического списка добавить поле ПОДСТРОКА(Наименование,1,1) КАК ПерваяБукваФИО и по нему делать группировку получится как то так... подругому
Прикрепленные файлы:
Поручик; DoctorRoza; +2 Ответить 1
2. dushelov (Душелов) 12.06.10 13:58
3. Алексей Роза (DoctorRoza) 12.06.10 15:16
Отличная идея! Мне понравилась .. возьму на вооружение! :idea:
4. Дмитрий Бухалов (Re:аниматор) 12.06.10 17:06
(3) данная идея уже существует в рарусовских конфах еще на 7.7 с 2003 года 100%.
также "Все" и буквы ... через закладки страниц

увы, но идея старая

Алфавит = "АБВ ГДЕ ЁЖЗ ИЙК ЛМН ОПР СТУ ФХЦ ЧШЩ ЪЫЬ ЭЮЯ";

Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение("Все");
ИерархическийСписок(1);
Для К = 1 ПО 43 Цикл
Форма.Закладки.ДобавитьЗначение(Сред(Алфавит,К,3));
К = К + 3;
КонецЦикла;

...
5. Armando Armando (Armando) 12.06.10 21:56
(4) хм, надо же какое совпадение. Из рарусовских видел только УАТ на восьмерке. Там этого точно нет. Такая штука была у нас в старой корпоративной базе на MS Access. Вот пользователи и запросили, чтоб как раньше. Не хотел я плагиатить, чесслово.
6. Алексей (Alav) 13.06.10 01:52
(1) Типовая БП. Рабочая места кадровика. Все сотрудники тоже сгруппированы по первым буквам алфавита
7. Дмитрий Бухалов (Re:аниматор) 13.06.10 06:28
(5) решение отличное, без вопросов, а вот тем кто про идею, это уже старое решение :) лично я использую в своих конфах с 2003 года, на 7.7, 8.0, 8.1, 8.2 ... (надеюсь)

8. Санёк Бадзугашвили (Rodegast) 14.06.10 11:07
Почему цифр нет? У меня справочник с контрагентами где есть какая то 1С. :D
А так +1
9. Armando Armando (Armando) 14.06.10 13:03
(8) Потому что это всего лишь пример ;) . А ведь можно еще и латиницу прикрутить или вообще вот так:
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ПОДСТРОКА(Т.Наименование, 1, 1) КАК ПерваяБукваНаименования
ИЗ
	%ИмяТаблицы% КАК Т

УПОРЯДОЧИТЬ ПО
	ПерваяБукваНаименования
...Показать Скрыть
Поручик; kivals; +2 Ответить 1
10. Андрей Д. (detec) 15.06.10 10:37
Супер! Удобный, без проблем встраиваемый код!
11. homutke (homutke) 16.06.10 11:28
Интересно как это будет работать на китайском языке :o
12. Ярослав (kivals) 16.06.10 14:35
(9) Такая же мысль в голову пришла :)
Можно еще чтобы не нарушать алфавит добавить обязательные буквы алфавита (как у автора: без Ё,Й,Ъ,Ь), и сделать ПОЛНОЕ СОЕДИНЕНИЕ с запросом.
Тогда быквы, не найденные в справочнике, можно будет сделать недоступными и кроме того быть уверенным, что попадут все первые буквы названий
13. МagIvan (RailMen) 17.06.10 01:01
Armando, привет!
Идея стара, но ее реализация академична.
Меня больше свего впечатляет как ты оформил публикацию.
Напиши отдельную статью как красиво оформить публикацию: как вставлять куски кода с прокруткой, как вставлять картинки и прочее. Или ссылку если такие уже есть. Буду безмерно признателен.
14. Armando Armando (Armando) 28.06.10 22:28
(13) Привет!
Сам не понял откуда там прокрутка взялась. С первого раза даже не разобрался как от нее избавиться)))
15. Елена Кучугурина (helenchekc) 18.09.10 12:17
Здравствуйте, я решила установить даный модуль в список Контактные лица, после чего с начала исчезли все колонки в списке кроме ФИО, помучавшись над возвращением колонок, я решила вернуть так как было... и теперь вообще когда выибираешь справочник Контактные лица - программа вылетает ((((( :?:
16. Александр Рытов (Арчибальд) 18.09.10 12:51
17. Сергей Ожерельев (Поручик) 19.09.10 01:30
(15) Ужасть просто. Извините, а вы руки вы.., то есть я хотел сказать, делали всё по инструкции?
18. Елена Кучугурина (helenchekc) 20.09.10 12:16
Да, если выше перечисленный текст - это инструкция.... Хотя не могу назвать себя профи )), но этого момента начего подобного не случалось и при том справочник Контрагенты - работает нормально... Хотя я из него тоже после установки, удалила эту обработку
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа