Меню

Ошибка отображения типов отсутствует отображение для типа файл

Передать пачку файлов на клиент

Я
   John83

29.10.19 — 09:55

На сервере создаю несколько csv-файлов, нужно их сохранить на клиенте.

Попробовал вернуть массив файлов, но ругается

Ошибка отображения типов:

Отсутствует отображение для типа ‘Файл’

Вроде как файл доступен и на клиенте.

Делаю так

МассивФайлов = Новый Массив;

ТекстовыйФайлЗапись = Новый ЗаписьТекста(«c:TempобменОстаткиИЦены» + (Цел(сч/300)+1) + «.csv», КодировкаТекста.UTF8);

ТекстовыйФайлЗапись.ЗаписатьСтроку(ТекстЦСВ);

ТекстовыйФайлЗапись.Закрыть();

МассивФайлов.Добавить(НайтиФайлы(«c:TempобменОстаткиИЦены» + (Цел(сч/300)+1) + «.csv»)[0]);

Возврат МассивФайлов;

   John83

1 — 29.10.19 — 09:55

Ошибка отображения типов:

Отсутствует отображение для типа ‘Файл’

{ВнешняяОбработка.ВыгрузитьОстаткиИЦены.Форма.Форма.Форма(147)}:    МассивФайлов = ВыгрузитьНаСервере();

по причине:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘ret’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘Value’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.1/data/core}Value

по причине:

Ошибка отображения типов:

Отсутствует отображение для типа ‘Файл’

   ДенисЧ

2 — 29.10.19 — 09:56

Странно, да? )))

В ХЗ их помещай и отдавай это Хз

   John83

3 — 29.10.19 — 09:58

(2) очень странно 🙂

массив ведь тоже доступен и там и там

спасибо, попробую

PS опыта работы с тонким клиентом очень мало

   ДенисЧ

4 — 29.10.19 — 10:00

(3) Массив-то доступен. Но оно ругается на «Отсутствует отображение для типа ‘Файл'». Про массив ни слова…

«опыта работы с тонким клиентом очень мало» А меня тут гнобят за то, что я не переношу УФ )))

   John83

5 — 29.10.19 — 10:06

(4) а что в ХЗ помещать?

массив не дает, типа не сериализуется

   unregistered

6 — 29.10.19 — 10:08

(0)(5) см. в синтакс-помощнике НачатьПомещениеФайлов и НачатьПолучениеФайлов.

   ДенисЧ

7 — 29.10.19 — 10:17

(5) У тебя там же текст. Вот его и помещай.

   ДенисЧ

8 — 29.10.19 — 10:17

Или (6)

   Cyberhawk

9 — 29.10.19 — 10:28

(5) Массив из ОписаниеПередаваемогоФайла

   Юрий Лазаренко

10 — 29.10.19 — 10:29

(0) Правильно ругается, у файлов на сервере есть путь, который на клиенте чаще всего недоступен.

(6) Оно же только на клиенте работает ЕМНИП, а ТС надо с сервера передать.

(0) А зачем именно файл передавать? Ты же судя по коду в (0) просто пишешь массив текстов в файлы и потом сразу передаешь на клиент. Сделай из этих нескольких текстов JSON или XML, передай на клиента как строку. Ну или читай каждый файл как двоичные данные и передавай на клиента массив двоичных данных.

   Cyberhawk

11 — 29.10.19 — 10:31

(10) «зачем именно файл передавать?» // Чтобы не упереться в максимальный размер порции, настроенный на веб-сервере.

«Оно же только на клиенте работает ЕМНИП» // НачатьПолучениеФайлов, Карл

   Юрий Лазаренко

12 — 29.10.19 — 10:34

(11) «Чтобы не упереться в максимальный размер порции,» Какая ему разница, будет это массив файлов, помещенных в ХЗ (которое суть строка) или массив ДД, или JSON?

«НачатьПолучениеФайлов, Карл» — ему сначала на сервере надо сделать НачатьПомещениеФайлов, а оно

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение(клиент).

   Cyberhawk

13 — 29.10.19 — 10:46

(12) Тупишь

   Юрий Лазаренко

14 — 29.10.19 — 10:47

(13) Аргументируй

  

palsergeich

15 — 29.10.19 — 10:51

Самый простой вариант — упаковать на сервере средствами платформы в ЗИП и вернуть как результат функции на клиент и там средствами платформы распаковать.

Вариант 2 делаешь на сервере структуру ключ — как тебе удобно, значение — двоичные данные. Помешаешь ее во временное хранилище по адресу формы и на клиенте получаешь из вре енного хранилища

Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений’

Описание ошибки:
Ошибка при программировании, конфигурировании кода в 1С 8:

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

Найденные решения:

1C 8 Ошибка отображения типов: Отсутствует отображение для типа ЭлементСпискаЗначений,

Нажатие на изображении увеличит его
1C 8, Отсутствует отображение для типа ЭлементСпискаЗначений, по причине, ошибка передачи данных между клиентом и сервером, значение недопустимого типа

Возникла при написании кода индивидуальной конфигурации. Но, как оказалось, может подстерегать программиста из-за его невнимательности и при конфигурировании в других конфигурациях. Итак, в чем же причина возникновения данной ошибки. В управляемой форме был создан реквизит типа «СписокЗначений». При открытии формы по коду срабатывает обработчик заполнения этого списка значений. Т.е. в коде создается переменная с помощью конструктора «Новый СписокЗначений», значение которой потом и устанавливается реквизиту формы. Но, перед тем как это происходит, в коде список значений изменяется — в частности выполняется его дополнительная сортировка. Конечно, ошибка «Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений'» может возникнуть у Вас не только в такой ситуации. Сейчас разберемся в чем ее суть.

1С 8, Ошибка для типа ЭлементСпискаЗначений, передачи данных между клиентом и сервером, значение недопустимого типа, по причине, ошибка преобразования данных XDTO

Как было отмечено в этой частной задаче выполняется сортировка исходного заполненного списка значений. Но, т.к. в этой частной задаче не подходило использование метода «СортироватьПоЗначению(<Направление>)«, т.к. сортировка более сложная (по текстовым данным с разделителями порядка, содержащих разделитель «.», пример: 1.1, 2.2, 2.2.1, 2.2.2, 3.1, 3.2, 3.3.1, 3.3.2). Поэтому сортировка выполнялась программно с созданием новой переменной типа «СписокЗначений» и ее заполнением по данным исходного списка.

После сохранения кода и попытки проверки появилась ошибка, текст которой приведен в начале страницы. Анализ данных через предмет отладки неявно, но показал ошибку.

Нажатие на изображении увеличит его

1C 8, как устранить, исправить ошибку, ошибка преобразования данных XDTO, отсутствует отображение для типа ЭлементСпискаЗначений

Не смотря на то, что в методической информации «Синтакс-помощника» 1С 8 указано, что значение элемента списка значений может быть любым (произвольным), все-таки для случая использования в управляемой форме в качестве реквизита накладывается ограничение по типу. И нельзя в значение такого списка значений поместить «ЭлементСискаЗначений» другого списка значений.

1С 8, какие значения могут быть у списказначений, исключения для управляемой формы

Т.е. для моего случая использования списка значений в управляемой форме в качестве реквизита ошибка была в коде, где происходило заполнение значений нового списка по данным исходного при сортировке.

Нажатие на изображении увеличит его

Было выполнено исправление в коде для обращения к значениям и передачи их в качестве значений нового списка значений. 

Нажатие на изображении увеличит его
1С 8, в чем причина ошибки в форме, отсутствует отображение для типа Элемент списка значений, ошибка отображения типов

В данном случае значениями списка были значения примитивного тип «Строка», поэтому дальнейшая работа доработанного кода стала возможной. И это все-таки позволило реализовать задачу. Если у Вас будут другие типы, например ссылки, то продумывайте заранее, как будете упорядочить, возможно придется через другие универсальные объекты, например использование таблицы значений, и потом заполнять конечный список значений. Другие примитивные типы не проверялись, но предполагаю, что они так же подойдут для корректной работы в управляемой форме. в качестве значений списка. Поэтому учитывайте это, если столкнетесь с данной ошибкой при Вашем конфигурировании — подбирайте по возможности простой тип для значений списка.

Нажатие на изображении увеличит его
1С 8, в чем, причина ошибки, как устранить, Ошибка передачи данных между клиентом и сервером, отсутствует отображение для типа элемент списка значений

Таким образом на примере данной частной ситуации возникновения ошибки при конфигурировании в 1С 8 «Отсутствует отображение для типа ЭлементСпискаЗначений, по причине, ошибка передачи данных между клиентом и сервером, значение недопустимого типа» извлекаем вывод о том, что нужно быть внимательным и не заполнять значения объекта «Список значений» элементами другого списка значений. А передавать значения элемента списка значений, если одна переменная типа «СписокЗначений» заполняется за счет другой подобной.

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

16-03-2022

Журавлев А.С.
(Сайт azhur-c.ru)

Добрый день. Сегодня наступил на интересные грабли:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: param Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’

Подобная ошибка возникает при попытке передать с клиента на сервер таблицу значений, и это мне давно известно, однако я получил эту ошибку без явной передачи таблицы. Вот часть кода с которым произошла ошибка:

&НаКлиенте
Процедура Заполнить(Команда)
тМассив = Новый Массив;
тМассив .Добавить(Объект.Организация);
ПоискНаСервере(тМассив);
КонецЕсли;
КонецПроцедуры

Процедура ПоискСсылокНаСервере(тМассив, тОсновнаяТаблица = Неопределено)

тДанныеВФорму = Ложь;

Если тОсновнаяТаблица = Неопределено Тогда

тОсновнаяТаблица = Новый ТаблицаЗначений;

тОсновнаяТаблица.Колонки.Добавить(«Ссылка»);

тДанныеВФорму = Истина;

КонецЕсли; 

<<<<>>>>>>

Если <<<<>>>>>> Тогда 

ПоискСсылокНаСервере(МассивСсылок,тОсновнаяТаблица);

КонецЕсли;

Если тДанныеВФорму Тогда

ЗначениеВРеквизитФормы(тОсновнаяТаблица,»ТаблицаСсылок»);

КонецЕсли;

КонецПроцедуры

В этом  коде процедура  с клиента вызывает выполнение кода на сервере, с одним единственным параметром, — массив ссылок. Хотя в процедуре есть два входящих параметра это массив и таблица значение — которая является не обязательным параметром и используется при рекурсивном вызове. И не смотря на то что при вызове с клиента на сервер мы не используем второй параметр, приложение пытается отправить данное значение на клиент и мы получаем вышеописанную ошибку. Выход из данной ситуации один перед возвратом на клиент убить таблицу написав код:

тОсновнаяТаблица = Неопределено

На сегодня все.

Данная ошибка возникает в тот момент, когда Вы пытаетесь вызвать серверный метод и передаете ему в качестве параметра управляемую форму.

Рассмотрим следующий модуль управляемой формы:

&НаСервере
Функция ТестВызоваСервера(Форма)

	Форма.ТолькоПросмотр = Истина;

КонецФункции // ТестВызоваСервера()

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//попытка передачи переменной локального контекста на сервер
	ТестВызоваСервера(ЭтаФорма);
	
КонецПроцедуры

Дело в том, что в контексте модуля управляемой формы переменная ЭтаФорма доступна всегда (как на клиенте, так и на сервере) и дополнительно ее передавать не требуется (если только вы не вызываете процедуру или функцию, перед которой указана директива &НаСервереБезКонтекста). Правильным будет следующий код:

&НаСервере
Функция ТестВызоваСервера()

	ЭтаФорма.ТолькоПросмотр = Истина;	

КонецФункции // ТестВызоваСервера()

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//вызов контекстной серверной функции
	ТестВызоваСервера();
	
КонецПроцедуры

Аналогичное замечание относится к серверным вызовам. Вы не можете передать содержимое переменной ЭтаФорма на сервер. Вы можете только запросить необходимую информацию на сервере и изменить форму в контексте клиента, либо реализовать это через серверный метод самой формы. Например, такой код работать не будет:

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//попытка передачи переменной локального контекста на сервер
	ОбщийМодульСервер.Тест(ЭтаФорма);
	
КонецПроцедуры

Подумайте сами, чем можно заменить такой вызов

 

Сергей

Местный

Сообщений: 8
Баллов: 15
Регистрация: 26.06.2022

#10

0

28.06.2022 13:36:40

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

Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;

Если Поле = Элементы.Файлы Тогда
ОткрыватьЗакладкуФайлы=ПроверкаОткрытияЗаклФайлы(ЭтаФорма)
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуФайлы», ТекущиеДанные.Ссылка, ОткрыватьЗакладкуФайлы);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;

Если Поле = Элементы.ПодписанЭП Тогда
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуЭП», ТекущиеДанные.Ссылка, Истина);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;

Если Поле = Элементы.Задачи Тогда
ОткрытьФорму(«ОбщаяФорма.ПроцессыИЗадачи»,
Новый Структура(«Предмет», ТекущиеДанные.Ссылка),
ЭтаФорма);
Возврат;
КонецЕсли;

Если Поле = Элементы.ЕстьКатегории Тогда
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуКатегории», ТекущиеДанные.Ссылка, Истина);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;

Если Поле = Элементы.СостояниеКонтроля Тогда
КонтрольКлиент.ОбработкаКомандыКонтроль(ТекущиеДанные.Ссылка, ЭтаФорма);
Возврат;
КонецЕсли;

ПараметрыОткрытия = Новый Структура(«Ключ», ТекущиеДанные.Ссылка);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
КонецПроцедуры

Здравствуйте. В собственной конфигурации есть документ «ОбъектныйГрафик» с Тч «Задания». в которую входят реквизиты: ВыдающийОтдел — СправочникСсылка.Подразделения, Задание — СправочникСсылка.ЗаданияШаблон, ДеньВыдачи -целое число.
Справочник ЗаданияШаблон имеет структуру: Наименование содержит наименование задания, ДеньВыдачи(целое число) — порядковый номер рабочего дня выдачи задания. Хочу сделать, чтобы при добавлении строки в ТЧ при изменении реквизита «Задание» автоматически выводился День выдачи для этого задания. Делаю так:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&НаСервере
Функция ПолучитьДеньВыдачи(Отдел, СсылкаЗадание) Экспорт
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
             |  ЗаданияШаблон.ДеньВыдачи
             |ИЗ
             |  Справочник.ЗаданияШаблон КАК ЗаданияШаблон
             |ГДЕ
             |  ЗаданияШаблон.ВыдающийОтдел = &Отдел
             |          И ЗаданияШаблон.Ссылка = &Задание";
Запрос.УстановитьПараметр("Отдел",Отдел);
Запрос.УстановитьПараметр("Задание",СсылкаЗадание);
 РезультатЗапроса = Запрос.Выполнить();
    
 Возврат РезультатЗапроса.Выгрузить();
 
КонецФункции    
&НаКлиенте
Процедура ЗаданияЗаданиеПриИзменении(Элемент)
ТекущаяСтрока=Элементы.Задания.ТекущиеДанные;
ТекущаяСтрока.ДеньВыдачи=ПолучитьДеньВыдачи(ТекущаяСтрока.ВыдающийОтдел,ТекущаяСтрока.Задание);
КонецПроцедуры

В режиме предприятия я при изменении задания вылетает ошибка:
{Документ.ОбъектныйГрафик.Форма.ФормаДокумента.Фор ма(140)}: Ошибка при вызове метода контекста (ПолучитьДеньВыдачи)
ТекущаяСтрока.ДеньВыдачи=ПолучитьДеньВыдачи(Текуща яСтрока.ВыдающийОтдел,ТекущаяСтрока.Задание);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’

Что делаю не так? помогите пожалуйста.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка отображения типов отсутствует отображение для типа управляемая форма
  • Ошибка открытия хранилища политик ipsec 80070005