Быстрый отбор в справочнике по первой букве В статье описан способ быстрой организации отбора в списке справочника по первой букве наименования. Механизм легко дотачивается под собственные нужды.
Код 1C v 8.2 УП
&НаКлиенте
Процедура УстановитьПометку(Команда)
Для Каждого Кнопка Из Элементы. ПанельСБуквами. ПодчиненныеЭлементы Цикл
Кнопка. Пометка = ( Команда. Имя = Кнопка. Имя) ;
КонецЦикла ;
КонецПроцедуры
&НаСервере
Процедура ПодготовитьДинамическийСписок()
Список. ПроизвольныйЗапрос = Истина ;
ТекстЗапроса =
"ВЫБРАТЬ *
|ИЗ
| %ИмяТаблицы% КАК Т
|{ГДЕ
| (ПОДСТРОКА(Т.Наименование, 1, 1) В (&СписокБукв))}" ;
ТекстЗапроса = СтрЗаменить( ТекстЗапроса, "%ИмяТаблицы%" , Список. ОсновнаяТаблица) ;
Список. ТекстЗапроса = ТекстЗапроса;
КонецПроцедуры
&НаСервере
Процедура СоздатьПанельСБуквами()
ПанельСБуквами = Элементы. Вставить( "ПанельСБуквами" , Тип( "ГруппаФормы" ) , ЭтаФорма, Элементы. Список) ;
ПанельСБуквами. Вид = ВидГруппыФормы. КоманднаяПанель;
КомандаФормы = Команды. Добавить( "Все" ) ;
КомандаФормы. Действие = "УдалитьФильтрПоПервойБукве" ;
КнопкаФормы = Элементы. Добавить( "Все" , Тип( "КнопкаФормы" ) , ПанельСБуквами) ;
КнопкаФормы. ИмяКоманды = "Все" ;
КнопкаФормы. Пометка = Истина ;
Для Сч = КодСимвола( "А" ) По КодСимвола( "Я" ) Цикл
ИмяКоманды = Символ( Сч) ;
Если Найти( "Ё,Й,Ъ,Ь" , ИмяКоманды) > 0 Тогда
Продолжить;
КонецЕсли ;
КомандаФормы = Команды. Добавить( ИмяКоманды) ;
КомандаФормы. Действие = "УстановитьФильтрПоПервойБукве" ;
КнопкаФормы = Элементы. Добавить( ИмяКоманды, Тип( "КнопкаФормы" ) , ПанельСБуквами) ;
КнопкаФормы. ИмяКоманды = ИмяКоманды;
КонецЦикла ;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьФильтрПоПервойБукве(Команда)
Буква = Команда. Имя;
СписокБукв = Новый Массив;
СписокБукв. Добавить( Буква) ;
СписокБукв. Добавить( НРег( Буква) ) ;
Если Буква = "Е" Тогда
СписокБукв. Добавить( "Ё" ) ;
СписокБукв. Добавить( "ё" ) ;
КонецЕсли ;
Если Буква = "И" Тогда
СписокБукв. Добавить( "Й" ) ;
СписокБукв. Добавить( "й" ) ;
КонецЕсли ;
Список. Параметры. УстановитьЗначениеПараметра( "СписокБукв" , СписокБукв) ;
УстановитьПометку( Команда) ;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьФильтрПоПервойБукве(Команда)
ПараметрКомпоновкиДанных = Новый ПараметрКомпоновкиДанных( "СписокБукв" ) ;
ЗначениеПараметраКомпоновкиДанных = Список. Параметры. НайтиЗначениеПараметра( ПараметрКомпоновкиДанных) ;
Если ЗначениеПараметраКомпоновкиДанных = Неопределено Тогда
Возврат ;
КонецЕсли ;
ЗначениеПараметраКомпоновкиДанных. Использование = Ложь ;
УстановитьПометку( Команда) ;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПодготовитьДинамическийСписок( ) ;
СоздатьПанельСБуквами( ) ;
КонецПроцедуры
Данный текст необходимо вставить в модуль формы списка справочника.
Процедуру "ПриСозданииНаСервере" вручную назначить обработчиком одноименного события формы.
Если данному событию уже назначен обработчик, то необходимо дополнить его строками процедуры "ПриСозданииНаСервере" из
листинга .
Реквизита формы "Список"
не должен содержать произвольного запроса. Если список формируется произвольным запросом, то в запрос необходимо дописать условие компоновки:
{ГДЕ (ПОДСТРОКА(ИмяТаблицы.Наименование, 1, 1) В (&СписокБукв))}
и удалить процедуру "ПодготовитьДинамическийСписок" и все ее вызовы.
Автор
Armando Категория:
Справочники