Имя: Пароль:
1C
1С v8
УниверсальныйПоискОбъектов макет ФорматПоиска
0 Наська72
 
14.05.13
08:17
Добрый день!

Пытаюсь реализовать полнотекстовый поиск для самописного документа.
ДокументСписок на форме над ним поиск (в табличном поле есть колонки не из документ список).

Прописала в общем модуле МодульПоискаВДанных свою функцию:

Функция СоздатьОбъектПоискаДанныхДляЗаявокНаТП(Знач ЭлементФормыЗначениеОтбора, Знач ОбъектФормыСписок, Знач СписокДанных) Экспорт
   
   мПоискОбъектовВСпискахДанных = Обработки.ПоискОбъектовВСпискахДанных.Создать();
   мПоискОбъектовВСпискахДанных.ТипОбъектовПоиска = Тип("ДокументСсылка.ТП_Заявка");
   мПоискОбъектовВСпискахДанных.ПрефиксНазванияСпискаДляСохранения = "мСписокЗначенийОтбораЗаявкиНаТП.";

   мПоискОбъектовВСпискахДанных.СписокБыстрыхОтборовПоРеквизитам = Новый СписокЗначений();
   мПоискОбъектовВСпискахДанных.СписокБыстрыхОтборовПоРеквизитам.Добавить("Номер", "Номер");
   мПоискОбъектовВСпискахДанных.СписокБыстрыхОтборовПоРеквизитам.Добавить("Контрагент", "Заявитель");
   мПоискОбъектовВСпискахДанных.СписокБыстрыхОтборовПоРеквизитам.Добавить("ОбъектПодключения", "ОбъектПодключения");
   мПоискОбъектовВСпискахДанных.СписокБыстрыхОтборовПоРеквизитам.Добавить("Договор", "Номер договора");
   мПоискОбъектовВСпискахДанных.СписокБыстрыхОтборовПоРеквизитам.Добавить("АдресМестонахождения", "АдресМестонахождения");
   мПоискОбъектовВСпискахДанных.СписокБыстрыхОтборовПоРеквизитам.Добавить("НомерТЗ", "Номер ТЗ");


   мПоискОбъектовВСпискахДанных.ОбъектФормыЗначениеОтбораСпискаДанных = ЭлементФормыЗначениеОтбора;
   мПоискОбъектовВСпискахДанных.ОбъектФормыСписок = ОбъектФормыСписок;
   мПоискОбъектовВСпискахДанных.Список = СписокДанных;
   мПоискОбъектовВСпискахДанных.ПрефиксПутиСохраненияНастроекПользователя = "Документы.ТП_Заявка.ФормаСписка";
       
   Возврат мПоискОбъектовВСпискахДанных;
   
КонецФункции

Работают все отборы кроме "Все видимые поля". Выдается ошибка: "{Обработка.УниверсальныйПоискОбъектов.МодульОбъекта(263)}: Значение не является значением объектного типа (ПолноеИмя)
       ТаблицаОбъекта = МетаданныеОбъекта.ПолноеИмя();"

МетаданныеОбъекта почему то неопределено. Он пытается слепить два слова "Документы" и "ТП_Заявка", и не может получить метаданные (название верное).

Кто подскажет, полнотекстовый поиск по документам (а не справочникам) возможен?
1 Наська72
 
14.05.13
08:23
Тип объекта поиска прописан в макете Формат поиска в УниверсальномПоискеОбъектов так "Документы.ТП_Заявка"
2 cw014
 
14.05.13
08:28
Может убрать слово "Документы"???
3 Наська72
 
14.05.13
08:28
Также попробовала "Документ" и "ДокументСписок" ничего не помогает.(
Реально поиск по документам?
4 cw014
 
14.05.13
08:32
Функция ПолучитьМетаданныеОбъекта(Знач ИмяТипаОбъекта, Знач ИмяОбъекта) Экспорт
   
   ВрегИмяТипаОбъекта = Врег(ИмяТипаОбъекта);
   
   Если ВрегИмяТипаОбъекта = "РЕГИСТРСВЕДЕНИЙ" Тогда
       МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип("РЕГИСТРСВЕДЕНИЙНаборЗаписей." +  ИмяОбъекта));
   Иначе
       
       // тут могут быть и табличные части, это надо отдельно отрабатывать...
       ПозицияТочки = Найти(ИмяОбъекта, ".");
       // отчка есть - значит точно табличная часть
       Если ПозицияТочки > 0 Тогда
           ПрефиксПоиска = "ТабличнаяЧасть";
           СтрокаТипаОбъекта = "";
           СтрокаИмениОбъекта = "";
           ВыделитьСтрокиПоРазделителю(ИмяОбъекта, ".", СтрокаТипаОбъекта, СтрокаИмениОбъекта);
           ИмяОбъектаПоиска = СтрокаТипаОбъекта + ".ТабличныеЧасти." + СтрокаИмениОбъекта;    
       Иначе
           ПрефиксПоиска = "Ссылка";
           ИмяОбъектаПоиска = ИмяОбъекта;
       КонецЕсли;
       
       Если ВрегИмяТипаОбъекта = "СПРАВОЧНИКИ" Тогда
           МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип("Справочник" + ПрефиксПоиска + "." +  ИмяОбъекта));
       ИначеЕсли ВрегИмяТипаОбъекта = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда
           МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип("ПланВидовХарактеристик" + ПрефиксПоиска + "." +  ИмяОбъекта));
       // ========== Вот это добавь
       ИначеЕсли ВрегИмяТипаОбъекта = "ДОКУМЕНТ" Тогда
           МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип("Документ" + ПрефиксПоиска + "." +  ИмяОбъекта));
       // ========== Вот это добавь
       КонецЕсли;
   
   КонецЕсли;
   
   Возврат МетаданныеОбъекта;
   
КонецФункции
5 Галахад
 
гуру
14.05.13
08:33
Пример:

   РазмерПорции = 50;
   СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок("", РазмерПорции);
   СписокПоиска.ПолучатьОписание = Ложь;
   
   МассивМД = Новый Массив();
   МассивМД.Добавить(Метаданные.Документы.КассовыйЧек);
   СписокПоиска.ОбластьПоиска = МассивМД;
   СписокПоиска.СтрокаПоиска = СтрокаПоиска;
   СписокПоиска.РазмерПорции = РазмерПорции;
   СписокПоиска.ПерваяЧасть();
   
   Для Индекс=0 По СписокПоиска.Количество()-1 Цикл
       элемент = СписокПоиска.Получить(индекс);
       Сообщить(элемент.Представление);
   КонецЦикла;
6 Наська72
 
14.05.13
08:48
Всё прописала. Не ругается, но и не ищет =(
7 cw014
 
14.05.13
08:48
Ну потому что дальше по коду смотреть надо, что и как он ищет. Там еще могут быть "заглушки" на справочник, регистр сведений и план видов характеристик
8 Наська72
 
14.05.13
08:58
А может быть реализовать запросом через видимые колонки? Как думаете, это будет дольше?
9 cw014
 
14.05.13
08:59
(8) Не знаю даже