Имя: Пароль:
1C
1С v8
ОбработкаПолученияДанныхВыбора - список больше 50 через ПолучитьДанныеВыбора
0 RomaH
 
naïve
04.04.13
13:40
Собственно
пропсал в менеджере справочника контрагентов свою обработку получения данных

теперь при подборе контрагента - она отрабатывает - все красиво и хорошо
ввожу "т" - жму ентер - пишет, что найдено более 50 элементов справочника

дальше захотел воспрользоваться параметром "Параметры" в ОбработкаПолученияДанныхВыбора

<Параметры>

Тип: Структура.
Содержит параметры выбора.
Их можно дополнительно настроить в обработчике события.
Структура, в которой обязательно должны содержаться следующие ключи:

для этого обработчик вызываю через метод ПолучитьДанныеВыбора

и все работает, кроме того, что когда ДанныеВыбора.Количество() > 50 этот метод возвращает пустой список.
соответсвенно получаю что данные не найдены, вместо - "Уточните поиск"
1 RomaH
 
naïve
04.04.13
13:48
как воспроизвести:

в обработчик получения данных конрагентов:

   СтандартнаяОбработка = Ложь;

   Запрос = Новый Запрос;
   
   Запрос.УстановитьПараметр("Текст","%" + Текст + "%");

   
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Контрагенты.Ссылка,
   |    Контрагенты.ПометкаУдаления,
   |    Контрагенты.Код,
   |    Контрагенты.Наименование
   |ИЗ
   |    Справочник.Контрагенты КАК Контрагенты
   |ГДЕ
   |    (Контрагенты.Наименование ПОДОБНО &Текст
   |    ИЛИ Контрагенты.НаименованиеПолное ПОДОБНО &Текст)
   |";
   
   
   Результат = Запрос.Выполнить().Выбрать();
   
   ДанныеВыбора = Новый СписокЗначений;
   
   Пока Результат.Следующий() Цикл
       
       ДанныеВыбора.Добавить(Результат.Ссылка,,Результат.ПометкаУдаления);    
       
   КонецЦикла;

тут получаем список контрагентов у которых наименование СОДЕРЖИТ заданый текст

если просто описать этот обработчик - то поля выбора конрагентов будут работать по этому алгоритму
2 RomaH
 
naïve
04.04.13
13:49
но если прописать в обработчике

&НаКлиенте
Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   ДанныеВыбора = ПолучитьСписокКонрагентов(Элемент.Имя,Текст);
КонецПроцедуры

&НаСервере
Функция ПолучитьСписокКонрагентов(Элемент,Текст)
   
   ПараметрыВыбора = Новый Структура;
   ПараметрыВыбора.Вставить("Отбор",Новый Структура);
   ПараметрыВыбора.Вставить("СтрокаПоиска",Текст);
   ПараметрыВыбора.Вставить("ВыборГруппИЭлементов",ИспользованиеГруппИЭлементов.Элементы);
   
       
   //ДанныеВыбора = ПолучитьДанныеВыбора(Тип("СправочникСсылка.Контрагенты"),ПараметрыВыбора);
   ДанныеВыбора = Справочники.Контрагенты.ПолучитьДанныеВыбора(ПараметрыВыбора);
   
   Возврат ДанныеВыбора;
   
КонецФункции


то поле будет отрабатывать как и прежде за исключением случая, когда список выбора будет больше 50
3 MSII
 
04.04.13
13:57
А если сначала заполнить данные выбора, потом проверить их количество и если оно <= 50, то СтандартнаяОбработка = Ложь.
4 RomaH
 
naïve
04.04.13
14:07
(3) дело в том, что если на выходе из обработчика СтандартнаяОбработка = Итсина, то происходит стандартное заполнение списка ДанныеВыбора
т.е. получим всех контров у которых наименование НАЧИНАЕТСЯ на "т", а не содержит
5 RomaH
 
naïve
04.04.13
14:07
обход нашел, но неужели нет "правильного" метода?

   Если ДанныеВыбора.Количество() > 50 И Параметры.Свойство("НайденоБольше50") Тогда
       Параметры.НайденоБольше50.НайденоБольше50 = Истина;
   КонецЕсли;