-
При передаче результата запроса функции через Возврат в Клиент, выходит ошибка «Отсутствует отображение для типа ‘ВыборкаИзРезультатаЗапроса‘».
При совершении таких же манипуляций с кодом, ошибок не возникало. На ошибки все проверил.
Какой тут может быть подводный камень?На клиенте:
Процедура РаскладкаПКОтПриИзменении(Элемент) СтрокаТабличнойЧасти = Элементы.Раскладка.ТекущиеДанные; ПКДо = СтрокаТабличнойЧасти.ПКОт + СтрокаТабличнойЧасти.Длина; Результат = РаскладкаТрубы.ПересеченияРаскладки(СтрокаТабличнойЧасти.ПКОт, ПКДо); КонецПроцедуры
НаСервере
Функция ПересеченияРаскладки(От,До)Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТрубаРаскладка.ПКОт, | ТрубаРаскладка.ПКДо, | ТрубаРаскладка.ТрубаНом, | ТрубаРаскладка.ТрубаНом.Длина КАК Длина |ИЗ | РегистрСведений.ТрубаРаскладка КАК ТрубаРаскладка |ГДЕ | ТрубаРаскладка.ПКОт <= &ПКОт И ТрубаРаскладка.ПКДо >= &ПКОт |УПОРЯДОЧИТЬ ПО ТрубаРаскладка.ПКОт |"; Запрос.УстановитьПараметр("ПКОт", От); Запрос.УстановитьПараметр("ПКДо", До); Результат = Запрос.Выполнить().Выбрать(); Возврат Результат; КонецФункции
-
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
Почитайте про Выбрать() и про его область видимости — На клиенте, На сервере…
-
А почему точно в таких же запросах из клиента в сервер все работает? Разница только в другой таблице.
-
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
Потому что:
РезультатЗапроса (QueryResult)
Выбрать (Select)
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).ВыборкаИзРезультатаЗапроса (QueryResultSelection)
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). -
Одинаковая ошибка как из Тонкого клиента, так из Толстого.
-
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
А где вы параметры запросу задаете ? Вернее их значения ?
— Объединение сообщений, 2 июн 2016 —
А, увидел
— Объединение сообщений, 2 июн 2016 —
Отладчиком проходились по серверной функции ? Попадает туда ?
-
По серверной ходил. Ответ по запросу есть. Но при передаче в клиент путем Возврат, выходит ошибка.
Перед этим киврялся и пытался передать значения на другую форму. Начала выходить ошибка. Потом эту Другую форму удалил……но результат с ошибкой сохранился.
Могло это как-то повлиять? -
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
Вроде как результат запроса на клиента нельзя передать, обрабатывайте на сервере все.
Ошибка отображения типов
Автор mahaidor, 17 апр 2014, 17:22
0 Пользователей и 1 гость просматривают эту тему.
Здравствуйте.Платформа 1с 8.3.437 . Выгружаю результат запроса в таблицу значений, в ответ возникает ошибка отображение типов: отсутствует отображение типа ValueTable.
&НаКлиенте
Процедура Ант_Вес_РостПриИзменении(Элемент)
Возраст=СТрока(Объект.Возраст);
Пол=Объект.Пол;
//обращение к табличной чати
СтрТабЧ=Элементы.Ант_Вес_Рост.ТекущиеДанные;
СтрокаВыборки=ВыборРезультатаЗапросаРоста(Возраст,Пол);
//СтрТабЧ.ОценкаРоста=ВыборРезультатаЗапроса(Возраст,Пол);
КонецПроцедуры
&НаКлиенте
Функция ВыборРезультатаЗапросаРоста(Возраст,Пол)
Рез=ВыборСтрокиКритериевРоста(Возраст,Пол);
Возврат Рез;
КонецФункции
Функция ВыборСтрокиКритериевРоста(Возраст,Пол)
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| КритерийРоста.Р_1,
| КритерийРоста.Р_2,
| КритерийРоста.Р_3,
| КритерийРоста.Р_4,
| КритерийРоста.Р_5,
| КритерийРоста.Р_6
| ИЗ Справочник.ТаблицаРоста КАК КритерийРоста
|ГДЕ КритерийРоста.Наименование=&Возраст и КритерийРоста.Пол=&Пол";
Запрос.УстановитьПараметр("Возраст",Возраст);
Запрос.УстановитьПараметр("Пол",Пол);
РезультатЗапроса = Запрос.Выполнить();
ТблЗн=РезультатЗапроса.Выгрузить();
Возврат ТблЗн;
КонецФункции
Да действительно нельзя передавать таблицу значений с сервера на клиент. Мутабельные переменные не передаются между серверным и клиентским контекстом. Попробуйте максимально перенести логику выполнения на сервер, а на клиенте получайте уже готовый результат.
Так же можно использовать временное хранилище для передачи таких значений.
Цитата: MuI_I_Ika от 17 апр 2014, 19:17
Да действительно нельзя передавать таблицу значений с сервера на клиент. Мутабельные переменные не передаются между серверным и клиентским контекстом. Попробуйте максимально перенести логику выполнения на сервер, а на клиенте получайте уже готовый результат.Так же можно использовать временное хранилище для передачи таких значений.
То есть вы имеете ввиду, что можно использовать объект «Хранилище значений» для передачи таблицы значений?
Не ХранилищеЗначений, а временное хранилище — серверный объект, как раз применяющийся для передачи данных с сервера на клиент. Поищите примеры, как в управляемом приложении реализован подбор товаров.
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
Про временные хранилища узнал, но решил их не использовать, просто обработал таблицу значений в функции, выполняемой в контексте сервера.
&НаКлиенте
Процедура Ант_Вес_РостПриИзменении(Элемент)
Возраст=СТрока(Объект.Возраст);
Пол=Объект.Пол;
//обращение к табличной чати
СтрТабЧ=Элементы.Ант_Вес_Рост.ТекущиеДанные;
Рост=СтрТабЧ.Рост;
СтрТабЧ.ОценкаРоста=ВыборКритерияРоста(Возраст,Пол,Рост);
КонецПроцедуры
&НаСервере
Функция ВыборКритерияРоста(Возраст,Пол,Рост)
//Запрос на получение строки критериев роста согласно полу и возрасту
Запрос=Новый Запрос;//создаем новый запрос
Запрос.Текст= //вводим содержание запроса
"ВЫБРАТЬ
| КритерийРоста.Р_1,
| КритерийРоста.Р_2,
| КритерийРоста.Р_3,
| КритерийРоста.Р_4,
| КритерийРоста.Р_5,
| КритерийРоста.Р_6
| ИЗ Справочник.ТаблицаРоста КАК КритерийРоста
|ГДЕ КритерийРоста.Наименование=&Возраст и КритерийРоста.Пол=&Пол";
Запрос.УстановитьПараметр("Возраст",Возраст);//вводим в запрос значениие возраста
Запрос.УстановитьПараметр("Пол",Пол); //вводим в запрос значениие пола
РезультатЗапроса = Запрос.Выполнить(); //выполениеие запроса
//обработка результатов запроса
ТблЗн=РезультатЗапроса.Выгрузить();//выгружаем результаты запроса в таблицу значений для обработки в ней данных
Для Каждого СтрокаТблЗн из ТблЗн Цикл //запускаем цмкл обработки данных в таблице значений
//определение критерия очень низкого роста
Если СтрокаТблЗн.Р_1>Рост Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Очень_низкий; КонецЕсли;
//определение критерия низкого роста
Если ((СтрокаТблЗн.Р_1=Рост) или (СтрокаТблЗн.Р_1<Рост))
И (СтрокаТблЗн.Р_2>Рост) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Низкий; КонецЕсли;
//определение критерия роста ниже среднего
Если ((СтрокаТблЗн.Р_2=Рост) или (СтрокаТблЗн.Р_2<Рост))
И (СтрокаТблЗн.Р_3>Рост) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Ниже_Среднего; КонецЕсли;
//определение критерия среднего роста
Если ((СтрокаТблЗн.Р_3=Рост) или (СтрокаТблЗн.Р_3<Рост))
И (СтрокаТблЗн.Р_4>Рост) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Средний; КонецЕсли;
//определение критерия роста выше среднего
Если ((СтрокаТблЗн.Р_4=Рост) или (СтрокаТблЗн.Р_4<Рост))
И (СтрокаТблЗн.Р_5>Рост) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Выше_Среднего; КонецЕсли;
//определение критерия высокого роста
Если ((СтрокаТблЗн.Р_5=Рост) или (СтрокаТблЗн.Р_5<Рост))
И ((СтрокаТблЗн.Р_6>Рост)или (СтрокаТблЗн.Р_6=Рост)) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Высокий; КонецЕсли;
//определение критерия очень высокого роста
Если (СтрокаТблЗн.Р_6<Рост) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Очень_Высокий; КонецЕсли;
КонецЦикла;
Возврат КритерийРоста;
КонецФункции
Вопрос решен, всем спасибо.
barracuda1991 1 / 1 / 1 Регистрация: 30.07.2015 Сообщений: 121 |
||||
1 |
||||
1C 8.x Подстановка цены в документ из регистра сведений через табличную модель21.05.2016, 15:57. Показов 5326. Ответов 6 Метки нет (Все метки)
Пытаюсь получить из регистра цену на выбираемый в табличной части товар по текущему контрагенту.
Ругается стр. 14
__________________
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
21.05.2016, 16:59 |
2 |
|||
barracuda1991, а где вы выполняете функцию?
а должно бы)
0 |
1 / 1 / 1 Регистрация: 30.07.2015 Сообщений: 121 |
|
21.05.2016, 18:07 [ТС] |
3 |
функция выполняется &НаСервере Добавлено через 27 минут Добавлено через 31 минуту
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||||||
21.05.2016, 20:37 |
4 |
|||||||
передавайте номенклатура без обращения к ссылке:
и прописывайте сразу:
Почему у вас на Выбрать() ругается — непонятно.
1 |
1 / 1 / 1 Регистрация: 30.07.2015 Сообщений: 121 |
|
21.05.2016, 20:59 [ТС] |
5 |
Почему у вас на Выбрать() ругается — непонятно. Через консоль запросов пробовал, в результирующей таблице есть данные. Теперь пишет:
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
21.05.2016, 21:30 |
6 |
|||
Сообщение было отмечено barracuda1991 как решение Решениеbarracuda1991,
0 |
1 / 1 / 1 Регистрация: 30.07.2015 Сообщений: 121 |
|
22.05.2016, 21:55 [ТС] |
7 |
Работает! ) Спасибо! )
0 |
Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений’
Описание ошибки:
Ошибка при программировании, конфигурировании кода в 1С 8:
Ошибка отображения типов:
Отсутствует отображение для типа ‘ЭлементСпискаЗначений’
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘v’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘value’:
форма: Элемент
имя: {http://v8.1c.ru/8.1/data/core}value
Найденные решения:
Нажатие на изображении увеличит его
Возникла при написании кода индивидуальной конфигурации. Но, как оказалось, может подстерегать программиста из-за его невнимательности и при конфигурировании в других конфигурациях. Итак, в чем же причина возникновения данной ошибки. В управляемой форме был создан реквизит типа «СписокЗначений». При открытии формы по коду срабатывает обработчик заполнения этого списка значений. Т.е. в коде создается переменная с помощью конструктора «Новый СписокЗначений», значение которой потом и устанавливается реквизиту формы. Но, перед тем как это происходит, в коде список значений изменяется — в частности выполняется его дополнительная сортировка. Конечно, ошибка «Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений'» может возникнуть у Вас не только в такой ситуации. Сейчас разберемся в чем ее суть.
Как было отмечено в этой частной задаче выполняется сортировка исходного заполненного списка значений. Но, т.к. в этой частной задаче не подходило использование метода «СортироватьПоЗначению(<Направление>)«, т.к. сортировка более сложная (по текстовым данным с разделителями порядка, содержащих разделитель «.», пример: 1.1, 2.2, 2.2.1, 2.2.2, 3.1, 3.2, 3.3.1, 3.3.2). Поэтому сортировка выполнялась программно с созданием новой переменной типа «СписокЗначений» и ее заполнением по данным исходного списка.
После сохранения кода и попытки проверки появилась ошибка, текст которой приведен в начале страницы. Анализ данных через предмет отладки неявно, но показал ошибку.
Нажатие на изображении увеличит его
Не смотря на то, что в методической информации «Синтакс-помощника» 1С 8 указано, что значение элемента списка значений может быть любым (произвольным), все-таки для случая использования в управляемой форме в качестве реквизита накладывается ограничение по типу. И нельзя в значение такого списка значений поместить «ЭлементСискаЗначений» другого списка значений.
Т.е. для моего случая использования списка значений в управляемой форме в качестве реквизита ошибка была в коде, где происходило заполнение значений нового списка по данным исходного при сортировке.
Нажатие на изображении увеличит его
Было выполнено исправление в коде для обращения к значениям и передачи их в качестве значений нового списка значений.
Нажатие на изображении увеличит его
В данном случае значениями списка были значения примитивного тип «Строка», поэтому дальнейшая работа доработанного кода стала возможной. И это все-таки позволило реализовать задачу. Если у Вас будут другие типы, например ссылки, то продумывайте заранее, как будете упорядочить, возможно придется через другие универсальные объекты, например использование таблицы значений, и потом заполнять конечный список значений. Другие примитивные типы не проверялись, но предполагаю, что они так же подойдут для корректной работы в управляемой форме. в качестве значений списка. Поэтому учитывайте это, если столкнетесь с данной ошибкой при Вашем конфигурировании — подбирайте по возможности простой тип для значений списка.
Нажатие на изображении увеличит его
Таким образом на примере данной частной ситуации возникновения ошибки при конфигурировании в 1С 8 «Отсутствует отображение для типа ЭлементСпискаЗначений, по причине, ошибка передачи данных между клиентом и сервером, значение недопустимого типа» извлекаем вывод о том, что нужно быть внимательным и не заполнять значения объекта «Список значений» элементами другого списка значений. А передавать значения элемента списка значений, если одна переменная типа «СписокЗначений» заполняется за счет другой подобной.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
16-03-2022
Журавлев А.С.
(Сайт azhur-c.ru)
Ошибка отображения типов:
Отсутствует отображение для типа ‘РезультатЗапроса’
{ИнструментыРазработчикаTormozit Обработка.ирКонсольЗапросов.Форма.Форма.Форма(2919)}: ирСервер.ВыполнитьАлгоритм(ТекстДляВыполнения, , , ПолучитьСтруктуруПараметров(), , мРезультатЗапроса, мРезультатПакета, мРезультатПоИменам);
{(1)}:КонтекстВыполнения.ВыполнитьЛокальноКодОбработкиРезультата(ТекстДляВыполнения, ЛиСинтаксическийКонтроль)
{ИнструментыРазработчикаTormozit Обработка.ирПлатформа.МодульОбъекта(4241)}: ИнформацияОбОшибке = Вычислить(«КонтекстВыполнения.» + МетодВыполнения + «(ТекстДляВыполнения, ЛиСинтаксическийКонтроль)»);
{ИнструментыРазработчикаTormozit Обработка.ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой.МодульОбъекта(1837)}: мПлатформа.ВыполнитьПрограммныйКодВКонтексте(КонтекстВыполнения, МетодВыполнения, ТекстДляВыполнения);
{ИнструментыРазработчикаTormozit Обработка.ирКонсольЗапросов.Форма.Форма.Форма(2737)}: КодОбработкиРезультата.ВыполнитьПрограммныйКод();
по причине:
Ошибка при вызове серверного метода.
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘param’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘РезультатЗапроса’
Платформа: 8.3.15.1778
Режим БД: файловый
Конфигурация. Название: Конфигурация ()
Конфигурация. Основной режим запуска: Управляемое приложение
Конфигурация. Вариант встроенного языка: Русский
Конфигурация. Режим совместимости: Версия8_3_10
Инструменты разработчика. Версия: Расширение 5.47e
Инструменты разработчика. Объекты на сервере: Да
Расширения. ИнструментыРазработчикаTormozit (5.47e)
Клиент. ОС: Windows x86-64 Microsoft Windows 10 version 10.0 (Build 18363)
Клиент. Приложение: Управляемое приложение 64б
Клиент. От имени администратора Windows: Нет
Клиент. Текущий язык системы: ru_RU
Добавлено (08.08.2020, 20:33)
———————————————
При переходе «в обычное приложение» при выполнении оператора
ВыборкаВыше = мРезультатЗапроса.Выбрать();
Дает диагностику:
Код обработки результата: Строка кода 5: Значение не является значением объектного типа (Выбрать)
Хотя контекстная подсказка выдает «легальность» этого метода