Имя: Пароль:
1C
1С v8
Сортировка и поиск по владельцу в форме списка подчиненного справочника
0 Cyberhawk
 
01.09.11
14:02
Типовая УТ 10.3. Есть форма списка справочника "Договоры контрагентов". Второй день бьюсь над реализацией механизма поиска/фильтра списка по наименованию владельца (т.е. контрагента). Конечная цель для пользователя: в форме списка договоров иметь возможность, введя несколько букв названия контрагента, встать на первый договор по нему (ну, или если брать отбор - увидеть все строки (договора) подходящих контрагентов).
Сортировки добился установкой свойства НастройкаПорядка у колонки реквизита формы СправочникСписок в обработчике формы "ПриОткрытии".

ЭлементУП = ЭлементыФормы.СправочникСписок.НастройкаПорядка.Найти("Владелец");
Если ЭлементУП <> Неопределено Тогда
  ЭлементУП.Доступность = Истина;
КонецЕсли;    

С поиском/отбором возникли некоторые проблемки. Сейчас дошел уже до того, что повесил на форму поле ввода и в событии "АвтоПодборТекста" планирую подменять источник данных (СправочникСписок) для табличного поля формы списка. Также есть вариант добавить текстовую колонку в источник данных (реквизит формы СправочникСписок), заполнить ее наименованием контрагентов и обновить табличное поле на форме.

Друзья, если кто-то реализовывал такой механизм - подкиньте пример или подскажите, в каком направлении двигаться. Позиционирование на нужной строке или отбор - не имеет значения, важно только то, что это выполняется для колонки со ссылочным типом (либо для программно добавленной колонкки).
1 Cyberhawk
 
01.09.11
14:05
Пардон, выше ошибка: свойство "НастройкаПорядка" не у колонки реквизита формы, а у колонки табличного поля формы, источником данных для которого является этот реквизит.
2 Cyberhawk
 
05.09.11
07:26
Сделал, как мне кажется, по-тупому: поместил поле ввода на форму и на событие АвтоПодборТекста() повесил функцию, которая запросом выгребает нужных мне контрагентов и программно устанавливает отбор вида "В списке" по этим контрагентам.


Процедура ПолеПоискаАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)

   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    Контрагенты.Ссылка
       |ИЗ
       |    Справочник.Контрагенты КАК Контрагенты
       |ГДЕ
       |    Контрагенты.Наименование ПОДОБНО ""%""+&Параметр+""%""";

   Запрос.УстановитьПараметр("Параметр", Текст);    
   Результат = Запрос.Выполнить().Выгрузить();

   СписокПодобранных = Новый СписокЗначений;
   СписокПодобранных.ЗагрузитьЗначения(Результат.ВыгрузитьКолонку("Ссылка"));
   
   СправочникСписок.Отбор.Владелец.ВидСравнения=ВидСравнения.ВСписке;
   СправочникСписок.Отбор.Владелец.Значение=СписокПодобранных;
   СправочникСписок.Отбор.Владелец.Использование=ЗначениеЗаполнено(ЭлементыФормы.ПолеПоиска.Значение);

Работает шустро, но и контрагентов в базе не больше тысячи (больше не предвидится).
Все-таки кто-то, возможно, реализовывал данный функционал по-другому? Подскажите более красивое решение, если оно есть, буду благодарен.
3 Cyberhawk
 
09.09.11
06:15
Ап.
4 Рэйв
 
09.09.11
06:45
СправочникСписок.<Имя справочника> (CatalogList.<Имя справочника>)
Отбор (Filter)
Использование:
Только чтение.
Описание:
Тип: Отбор. Позволяет установить отбор по реквизитам справочника. Имена элементов отбора совпадают с именами колонок списка справочника, а также дополняются критериями отбора, затрагивающими справочник.
См. также:
СправочникСписок, свойство Колонки
5 Cyberhawk
 
09.09.11
08:45
Хм, ну Я это и использую в своем варианте решения. Вы попробуйте поиск (позиционирование/фильтр) сделать, а не отбор :)
Интересует стандартное поведение 1С в случае с текстовыми колонками, но перенесенное для колонки владельцев (начните печатать на клавиатуре в форме списка номенклатуры - вот так же хочу и для владельца в форме списка договоров контрагентов).
6 Cyberhawk
 
13.09.11
11:07
Ап.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс