Имя: Пароль:
1C
 
8.2 Отсутствует отображение для типа 'ЭлементСпискаПолнотекстовогоПоиска'
0 Нууф-Нууф
 
26.02.10
12:36
выполняю сквозной пример по книге радченко "Предприятие 8.2 Практическое пособие разработчика".
дошел до обработки полнотекстового поиска.
вот модуль формы:
&НаКлиенте
Процедура Поиск(Команда)
   Искать(0);
КонецПроцедуры

&НаКлиенте
Процедура ПредыдущаяПорция(Команда)
   Искать(-1);
КонецПроцедуры

&НаКлиенте
Процедура СледующаяПорция(Команда)
   Искать(1);
КонецПроцедуры

&НаКлиенте
Процедура Искать(Направление)
   Если ПустаяСтрока(ПоисковоеВыражение) Тогда
       Предупреждение("Не задана строка поиска");
       возврат;
   конецЕсли;
   ИскатьСервер(направление);
КонецПроцедуры

&НаСервере
Процедура ИскатьСервер(Направление) экспорт
   СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок();
   СписокПоиска.СтрокаПоиска = ПоисковоеВыражение;
   Если Направление=0 тогда
       СписокПоиска.ПерваяЧасть();
   иначеЕсли Направление=-1 тогда
       СписокПоиска.ПредыдущаяЧасть(ТекущаяПозиция);
   иначеЕсли Направление=1 тогда
       СписокПоиска.СледующаяЧасть(ТекущаяПозиция);
   конецЕсли;
   РезультатыПоиска.Очистить();
   Для каждого Результат из СписокПоиска цикл
       РезультатыПоиска.Добавить(Результат);
   конеццикла;
   РезультатПоиска = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
   ТекущаяПозиция = СписокПоиска.НачальнаяПозиция();
   ПолноеКоличество = СписокПоиска.ПолноеКоличество();
   Если СписокПоиска.Количество()<>0 тогда
       СообщениеОРезультате = "Показаны "+ Строка(ТекущаяПозиция+1)+" - "
       +Строка(ТекущаяПозиция+СписокПоиска.Количество())
       +" из "+Строка(ПолноеКоличество);
       Элементы.СледующаяПорция.Доступность = ((ПолноеКоличество-ТекущаяПозиция)>СписокПоиска.Количество());
       Элементы.ПредыдущаяПорция.Доступность = (ТекущаяПозиция>0);
   иначе
       СообщениеОРезультате = "Не найдено";
       Элементы.СледующаяПорция.Доступность = ложь;
       Элементы.ПредыдущаяПорция.Доступность = ложь;
       
   конецЕсли;
КонецПроцедуры


&НаКлиенте
Процедура РезультатПоискаПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
   ЭлементHTML = ДанныеСобытия.Event.srcElement;
   Если (ЭлементHTML.id = "FullTextSearchListItem") Тогда
       
       // Получить имя файла (номер строки списка поиска), содержащегося в гиперссылке
       НомерВСписке = Число(ЭлементHTML.nameProp);
       
       // Получить строку списка поиска по номеру
       ВыбраннаяСтрока = РезультатыПоиска[НомерВСписке].Значение;
       
       // Открыть форму найденного объекта
       ОткрытьЗначение(ВыбраннаяСтрока);
       СтандартнаяОбработка = Ложь;
   КонецЕсли;
   
КонецПроцедуры


если задать в строке поиска текст которого заведомо в базе нет - то в после выполнения РезультатПоиска = СписокПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
в РезультатПоиска - будет пустой HTML документ.
и все отработает нормально.

НО. если завести в строку поиска текст, который заведомо есть. и поиск отработает нормально, то в РезультатПоиска - будет HTML документ с результатом. и при выходе из процедуры ИСКАТЬСЕРВЕР()

у меня вылетает ошибка
{Отчет.ПоискДанных.Форма.ФормаОтчета.Форма(23)}: Ошибка при вызове метода контекста (ИскатьСервер)
   ИскатьСервер(направление);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'v':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'value':
   форма: Элемент
   имя: {http://v8.1c.ru/8.1/data/core}value
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ЭлементСпискаПолнотекстовогоПоиска'


в 8ке еще новичок, но чувствую что он с сервера на клиента не может чего-то передать. а вот что именно и почему не может - не знаю.
1 Нууф-Нууф
 
26.02.10
12:40
ап
2 Нууф-Нууф
 
26.02.10
12:48
оп
3 Mort
 
26.02.10
12:48
РезультатПоиска - реквизит формы? Какого типа?
4 Нууф-Нууф
 
26.02.10
12:48
Поле HTML документа
5 Нууф-Нууф
 
26.02.10
12:50
элемент формы "РезультатПоиска". Вид "Поле HTML документа". Путь к данным "РезультатПоиска"

РезультатПоиска - реквизит формы с типом строка
6 Нууф-Нууф
 
26.02.10
12:51
поидее в процедуре в РеквизитФормы с типом строка запихивается строка содержащая текст страницы HTML...

может дело на самом деле не в этом реквизите
7 Mort
 
26.02.10
12:51
(4) Имелось ввиду строка?
8 Нууф-Нууф
 
26.02.10
12:52
(7) аха
9 Нууф-Нууф
 
26.02.10
12:55
апп
10 Нууф-Нууф
 
26.02.10
12:58
ну где же вы спецы по 82?
11 Нууф-Нууф
 
26.02.10
13:10
оп оп оп
12 Mort
 
26.02.10
13:23
Да, чо тут. Попытка преобразования происходит, судя по всему при передаче контекста (то бишь формы) обратно с сервера на клиент. Ищи отладчиком где в форме появился этот тип.
13 Нууф-Нууф
 
26.02.10
13:25
(12) т.е. в этой процедуре где-то создался элемент формы и при отправке формы обратно на клиента он ее не может найти, так как на форме нет такого элемента?
14 Mort
 
26.02.10
13:33
(13) Да не элемент формы. Переменная контекста грубо говоря. Например если в структуру-реквизит формы на сервере поместить менеджер справочника результат будет аналогичный.
15 Mort
 
26.02.10
13:34
РезультатыПоиска - это что?
16 Нууф-Нууф
 
26.02.10
13:37
(14) ТОЧНО!!!!! так и есть! Я передавал на форму то чего на форме быть не может. а именно
   РезультатыПоиска.Очистить();
   Для каждого Результат из СписокПоиска цикл
       РезультатыПоиска.Добавить(Результат);
   конеццикла;
я должен был совать в список значений Результат.Значение,
а я совал Результат с типом "ЭлементСпискаПолнотекстовогоПоиска".
поэтому при передачи этого элемента в форму выходила ошибка!

СПАСИБО!
17 Нууф-Нууф
 
26.02.10
13:39
вот что значит переходить на клиент-серверное мышление