30.06.15 — 12:03
Создаю на клиенте объект «XBase», затем передаю его в качестве параметра в процедуру выполняемую на сервере, в ответ получаю следующее сообщение о ошибке:
{Форма.Форма.Форма(130)}: Ошибка при вызове метода контекста (СформироватьНаСервере)
СформироватьНаСервере(ЭлементСпискаЗначений.Значение,xB);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘param’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘XBase’
Что я делаю не правильно???
1 — 30.06.15 — 12:21
(0) Все логично. Подумай сам — в чем смысл передачи параметра на сервер? По-твоему, база тоже на сервер «поедет»?
2 — 30.06.15 — 12:27
(0) объект не сериализуется, так просто между клиент сервером его не попинаешь. если не критично, лучше создавай сразу на сервере.
3 — 30.06.15 — 12:47
ПоместитьВоВременноеХранилище() ?
4 — 30.06.15 — 12:52
(1) (2) Заполнить данными объект «XBase» я могу только на сервере т.к. он заполнятся на основании данных из «Запроса», затем его нужно вернуть на клиент и сохранить в файловой системе клиентского PC.
5 — 30.06.15 — 13:05
Прочитай на клиенте, результат передай на сервер.
И наоборот
6 — 30.06.15 — 13:08
(0) а нафига ты его передаешь на сервер? ты с сервера получай результат запроса, а все заполняй на клиенте
7 — 30.06.15 — 13:08
(4) заполнить ты его можешь и должен только на клиенте, а вот данные для заполнения получишь на сервере
8 — 30.06.15 — 13:21
(6) ВыборкаИзРезультатаЗапроса не доступна на тонком клиенте и соответственно ее нельзя передать на клиент и использовать для заполнения объект «XBase».
Получается замкнутый круг. Передавать объект «XBase» между клиентом и сервером нельзя, а как его тогда заполнить на клиенте по данным запроса не понятно!?
9 — 30.06.15 — 13:23
(8) рукалицо
10 — 30.06.15 — 13:23
Сначала базу заполняют на сервере, а потом клиент читает из нее и выводит на форму
11 — 30.06.15 — 13:37
(10) При чем тут форма?
Вопрос про то, как объект «XBase» заполнить на сервере и вернуть на тонкий клиент, а там сохранить на жесткий диск.
12 — 30.06.15 — 13:39
(1) не. надо. этого. делать
13 — 30.06.15 — 13:39
(12) -> (11)
14 — 30.06.15 — 13:46
(11) Заполняй xbase на клиенте, а данные для заполнения доставай с сервера.
15 — 30.06.15 — 13:46
вобщем, имхо проблема в том что товарищ не знает как получить данные с сервера на клиент
16 — 30.06.15 — 13:47
(15) Как-то так.
&НаСервере
Функция ПолучитьТЗ()
Запрос=Новый Запрос;
Запрос.Текст=»ВЫБРАТЬ Наименование ИЗ Справочник.ПодразделенияОрганизаций»;
ТабЗапроса=Запрос.Выполнить().Выгрузить();
возврат ТабЗапроса;
КонецФункции
&НаКлиенте
Процедура Команда1(Команда)
ТЗ=ПолучитьТЗ();
Для Каждого Строка ИЗ ТЗ цикл
Сообщить(Строка.Наименование);
КонецЦикла;
КонецПроцедуры
17 — 30.06.15 — 13:50
(16) плохой пример
18 — 30.06.15 — 13:50
(16) клиент не знает тз
19 — 30.06.15 — 13:51
давно тз между клиентом и сервером ходить научили?
20 — 30.06.15 — 13:57
(19) Там ходит что-то урезанное, указанный пример — рабочий.
21 — 30.06.15 — 13:57
(20) Ой, извините, ошибся — проверил в толстом.
22 — 30.06.15 — 13:58
Ну тогда лепить список из структур — они поддерживаются в тонком..
23 — 30.06.15 — 14:00
(22) а не проще все сформировать и сохранить в файл на сервере и передать этот файл на клиент?
24 — 30.06.15 — 14:00
Запрос.Выполнить() отдать на клиента и там уже издеваться над ним
25 — 30.06.15 — 14:01
(16) Поправлено
&НаСервере
Функция ПолучитьСтруктурку()
Запрос=Новый Запрос;
Запрос.Текст=»ВЫБРАТЬ Наименование ИЗ Справочник.СтруктураПредприятия»;
Структурка = Новый Структура;
Результатик = Запрос.Выполнить();
Выборочка = Результатик.Выбрать();
Счетчичек = 0;
Пока Выборочка.Следующий() Цикл;
Структурка.Вставить(«Имечко» + Счетчичек, Выборочка.Наименование);
Счетчичек = Счетчичек + 1;
КонецЦикла;
возврат Структурка;
КонецФункции
&НаКлиенте
Процедура Команда1(Команда)
Структурка=ПолучитьСтруктурку();
Для Каждого Элементик ИЗ Структурка цикл
Сообщить(Элементик.Ключ + «: » + Элементик.Значение);
КонецЦикла;
КонецПроцедуры
26 — 30.06.15 — 14:03
(24) Какой из методов РезультатаЗапроса доступен на клиенте?
27 — 30.06.15 — 14:04
вы что тут мозг человеку выносите
1.сразу вызываешь серверную функцию
2.на сервере создаешь дбф файл с именем временного файла (ПолучитьИмяВременогоФайла)
3.заполняешь его данными
4.закрываешь файл
5.создаешь объект ДвоичныеДанные, указываешь имя своего врем. файла, помещаешь его во временное хранилище
6.возвращаешь из функции адрес в хранилище
7.на клиенте функцией ПолучитьФайл размещаешь файл в ФС клиента
28 — 30.06.15 — 14:04
(23)правильно
29 — 30.06.15 — 14:05
(25) Так это структура…
Может ошибаюсь, но вроде можно ТЗ пульнуть в реквизит формы и оттуда прочитать клиентом. Не?
30 — 30.06.15 — 14:07
(29) Нет
31 — 30.06.15 — 14:07
(29) да, просто создать реквизит формы ТЗ типа таблица значений. И он прекрасно виден и на клиенте и на сервере. М не надо никаких структурок.
32 — 30.06.15 — 14:08
(30) Вру, можно
33 — 30.06.15 — 14:11
(31)можно, но только зачем? если проще все сделать на сервере и просто вернуть файл.
структуру дбф еще в реквизит формы закладывать придется.
34 — 30.06.15 — 14:14
(33) Да, на счет структуры дбф — согласен. Если там 100500 колонок то через файл может и проще.
35 — 30.06.15 — 14:15
ТС притих чего то
36 — 30.06.15 — 14:21
(27) 5.создаешь объект ДвоичныеДанные, указываешь имя своего врем. файла, помещаешь его во временное хранилище
А обязательно создавать объект ДвоичныеДанные? Без него временный файл нельзя поместить во временное хранилище?
37 — 30.06.15 — 14:21
зачем клиенту твой дбф-файл? Че он сним делать будет?
38 — 30.06.15 — 14:23
Смотреть? Редактировать? Или он хочет знать где лежит? Или его трясет что лежиь на сервере — а это секретные данные и только у него? Так сохрани ему на комп, упакуй и пароль поставь
39 — 30.06.15 — 14:25
(38) на дискетку запишет 🙂
40 — 30.06.15 — 14:25
(36)нельзя. тебя это пугает? =)
41 — 30.06.15 — 14:26
(27) Кстати адрес в хранилище необязателен, можно тупо вернуть на клиента ДвоичныеДанные
42 — 30.06.15 — 14:30
(41)Швадратные Ктаны (не удержался :))
по документации ДвоичныеДанные не доступны в тонком
43 — 30.06.15 — 14:31
(42) ДвоичныеДанные (BinaryData)
ДвоичныеДанные (BinaryData)
Методы:
Записать (Write)
Размер (Size)
Конструкторы:
На основании файла
Описание:
Значение содержит двоичные данные, которые считываются из файла. Значение может быть сохранено в ХранилищеЗначения.
Хранимые данные могут быть записаны в файл.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://www.w3.org/2001/XMLSchema}. Имя типа XDTO: может быть любым из перечисленных: base64Binary, hexBinary
44 — 30.06.15 — 14:32
чтобы не быть голословным вот рабочий пример
&НаСервере
Функция ПолучитьФайлик()
Запрос=Новый Запрос;
Запрос.Текст=»ВЫБРАТЬ Наименование ИЗ Справочник.СтруктураПредприятия»;
Результатик = Запрос.Выполнить();
ИмяФайла = ПолучитьИмяВременногоФайла();
Файл = Новый ЗаписьТекста (ИмяФайла);
Выборочка = Результатик.Выбрать();
Пока Выборочка.Следующий() Цикл;
Файл.ЗаписатьСтроку(Выборочка.Наименование);
КонецЦикла;
Файл.Закрыть();
ДД = Новый ДвоичныеДанные(ИмяФайла);
Возврат ДД;
КонецФункции
&НаКлиенте
Процедура Команда1(Команда)
ДД = ПолучитьФайлик();
ДД.Записать(«Какой_то_там_локальный_путьфайлик.txt»);
КонецПроцедуры
45 — 30.06.15 — 14:33
(44)я знаю
46 — 30.06.15 — 14:33
(45) тогда почему (42) ?
47 — 30.06.15 — 14:34
(43)а вот из 8.3
ДвоичныеДанные (BinaryData)
Методы:
Записать (Write)
Размер (Size)
Конструкторы:
На основании файла
Описание:
Значение содержит двоичные данные, которые считываются из файла. Значение может быть сохранено в ХранилищеЗначения.
Хранимые данные могут быть записаны в файл.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://www.w3.org/2001/XMLSchema}. Имя типа XDTO: может быть любым из перечисленных: base64Binary, hexBinary.
48 — 30.06.15 — 14:35
(47) эва как, тогда мои пардоны, я безнадежно устарел, загнил так сказать на своей 8.2, которая так умеет
49 — 30.06.15 — 14:37
(47) кстати, …Сериализуется.
интересненько
50 — 30.06.15 — 14:40
(48)конечно, иначе бы хрен бы мы его засунули во временное хранилище
но сериализовать его в текст и передавать строкой конечно же менее эффективно чем ПолучитьФайл. Получить файл это простое двоичное копирование с сервера на клиент.
51 — 30.06.15 — 14:41
(36)не забудь еще временный файл зачистить (УдалитьФайлы)
52 — 30.06.15 — 14:43
(50) Интересно, почему в 8.3 у клиента отпилили ДД? Утоньшение тонкого клиента?
53 — 30.06.15 — 14:44
(36)+на шаге 5 помещать во временное хранилище надо без указания идентификатора формы (2 параметр ПоместитьВоВременноеХранилище), это обеспечит удаление объекта из временного хранилища при следующем серверном вызове.
54 — 30.06.15 — 14:47
(52)да херней занимаются, проповедуют идею: чтобы эти 1сники не писали не эффективный код (они ж тупые) мы их ограничим так чтобы написать его было нельзя.
55 — 30.06.15 — 14:48
(54) Годная политика
56 — 30.06.15 — 14:58
(27) функция ПолучитьИмяВременногоФайла(«dbf») возвращает что то вроде: C:Usersi907_1c_serviceAppDataLocalTempv8_CE67_f6dd.dbf
А метод СоздатьФайл() объект «XBase» требует имени файла не более 8 символов.
Соответственно эта функция для этой задачи не подходит 🙁
57 — 30.06.15 — 15:02
(56) дык переименуй прежде чем создавать xbase
58 — 30.06.15 — 15:07
(56)ну значит получай имя каталога временных файлов, а имя файла придумай сам.
Тут проблема будет только в том что имя может совпасть с другим файлом из другого сеанса. Например другой юзер в тот же момент будет выполнять ту же функцию.
Можно сделать каталоги и менем из идентификатора сеанса например, чтобы гарантированно изолировать их друг от друга.
59 — 30.06.15 — 15:08
Всем спасибо за советы!!!
Вообщем -то получилось, как описано (27), но на клиент я передаю объект ДвоичныеДанные и там его сохраняю т.е. временное хранилище не использую.
60 — 30.06.15 — 15:08
добро пожаловать в настоящую клиент-серверную среду =)

61 — 30.06.15 — 15:13
(59) В 8.3 ДД нет на клиенте, но использовать его можно?
62 — 30.06.15 — 15:18
(61)
1С:Предприятие 8.3 (8.3.6.1999)
ДвоичныеДанные (BinaryData)
Записать (Write)
Синтаксис:
Записать(<ИмяФайла>)
Параметры:
<ИмяФайла> (обязательный)
Тип: Строка.
Имя файла, в который необходимо записать двоичные данные. Если файл существует, он будет перезаписан, иначе — создан.
Описание:
Записывает двоичные данные в файл.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
63 — 30.06.15 — 15:20
(62) Класс. Объект не доступен, его метод — доступен. 1С такая 1С
64 — 30.06.15 — 15:28
(63)не это похоже в документации 8.3.5 ошибка, проверил — работает вроде =)
но смотрите: только в тонком, в веб-клиенте (хз теперь уже, проверять надо)
Ну и чрез ПолучитьФайл, конечно меньше будет информации передаваться т.к. не будет сериализации параметров в текст.
65 — 30.06.15 — 15:32
(63) А как тогда поступать, если надо наоборот с клиента передать файл на сервер?
66 — 30.06.15 — 15:33
(65) Также, вроде разобрались что у клиента таки есть ДД
67 — 30.06.15 — 15:38
(65)правильно: это использовать функцию ПоместитьФайл
Это обеспечит работу и в веб-клиенте.
68 — 30.06.15 — 15:40
ДвоичныеДанные (BinaryData)
На основании файла
Синтаксис:
Новый ДвоичныеДанные(<ИмяФайла>)
Параметры:
<ИмяФайла> (обязательный)
Тип: Строка.
Имя файла, из которого будет загружено значение в виде двоичных данных.
Описание:
Создает объект и помещает в него двоичные данные, взятые из файла.
В режиме веб-клиента недоступен.
69 — 30.06.15 — 15:40
но доверять СП надо осторожно 🙂
70 — 30.06.15 — 15:53
(68) Это от какой версии? У меня в 8.3.6.1977 написано что поддерживается и на тонком клиенте, и на веб-клиенте.
71 — 30.06.15 — 15:59
(70)8.3.5.1517
72 — 30.06.15 — 16:05
(70) 8.3.6.2041 — тут тоже доступно.
Провинциальный 1сник
73 — 30.06.15 — 16:26
Странно, да.. Похоже у 1с поменялись планы — хотели сначала отказаться от ДД на клиенте, а передумали)
Создаю на клиенте объект «XBase», затем передаю его в качестве параметра в процедуру выполняемую на сервере, в ответ получаю следующее сообщение о ошибке: {Форма.Форма.Форма}: Ошибка при вызове метода контекста (СформироватьНаСервере) СформироватьНаСервере(ЭлементСпискаЗначений.Значение,xB); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства ‘param’: форма: Элемент имя: { по причине: Ошибка отображения типов: Отсутствует отображение для типа ‘XBase’ Что я делаю не правильно???
Все логично. Подумай сам — в чем смысл передачи параметра на сервер? По-твоему, база тоже на сервер «поедет»?
объект не сериализуется, так просто между клиент сервером его не попинаешь. если не критично, лучше создавай сразу на сервере.
ПоместитьВоВременноеХранилище ?
Заполнить данными объект «XBase» я могу только на сервере т.к. он заполнятся на основании данных из «Запроса», затем его нужно вернуть на клиент и сохранить в файловой системе клиентского PC.
Прочитай на клиенте, результат передай на сервер. И наоборот
а нафига ты его передаешь на сервер? ты с сервера получай результат запроса, а все заполняй на клиенте
заполнить ты его можешь и должен только на клиенте, а вот данные для заполнения получишь на сервере
ВыборкаИзРезультатаЗапроса не доступна на тонком клиенте и соответственно ее нельзя передать на клиент и использовать для заполнения объект «XBase». Получается замкнутый круг. Передавать объект «XBase» между клиентом и сервером нельзя, а как его тогда заполнить на клиенте по данным запроса не понятно!?
Сначала базу заполняют на сервере, а потом клиент читает из нее и выводит на форму
При чем тут форма? Вопрос про то, как объект «XBase» заполнить на сервере и вернуть на тонкий клиент, а там сохранить на жесткий диск.
#14
by Провинциальный 1сник
Заполняй xbase на клиенте, а данные для заполнения доставай с сервера.
вобщем, имхо проблема в том что товарищ не знает как получить данные с сервера на клиент
#16
by Провинциальный 1сник
давно тз между клиентом и сервером ходить научили?
#20
by Провинциальный 1сник
Там ходит что-то урезанное, указанный пример — рабочий.
#21
by Провинциальный 1сник
Ой, извините, ошибся — проверил в толстом.
#22
by Провинциальный 1сник
Ну тогда лепить список из структур — они поддерживаются в тонком..
а не проще все сформировать и сохранить в файл на сервере и передать этот файл на клиент?
Запрос.Выполнить отдать на клиента и там уже издеваться над ним
Какой из методов РезультатаЗапроса доступен на клиенте?
вы что тут мозг человеку выносите 1.сразу вызываешь серверную функцию 2.на сервере создаешь дбф файл с именем временного файла (ПолучитьИмяВременогоФайла) 3.заполняешь его данными 4.закрываешь файл 5.создаешь объект ДвоичныеДанные, указываешь имя своего врем. файла, помещаешь его во временное хранилище 6.возвращаешь из функции адрес в хранилище 7.на клиенте функцией ПолучитьФайл размещаешь файл в ФС клиента
Так это структура… Может ошибаюсь, но вроде можно ТЗ пульнуть в реквизит формы и оттуда прочитать клиентом. Не?
да, просто создать реквизит формы ТЗ типа таблица значений. И он прекрасно виден и на клиенте и на сервере. М не надо никаких структурок.
можно, но только зачем? если проще все сделать на сервере и просто вернуть файл. структуру дбф еще в реквизит формы закладывать придется.
Да, на счет структуры дбф — согласен. Если там 100500 колонок то через файл может и проще.
5.создаешь объект ДвоичныеДанные, указываешь имя своего врем. файла, помещаешь его во временное хранилище А обязательно создавать объект ДвоичныеДанные? Без него временный файл нельзя поместить во временное хранилище?
зачем клиенту твой дбф-файл? Че он сним делать будет?
Смотреть? Редактировать? Или он хочет знать где лежит? Или его трясет что лежиь на сервере — а это секретные данные и только у него? Так сохрани ему на комп, упакуй и пароль поставь
нельзя. тебя это пугает? =)
Кстати адрес в хранилище необязателен, можно тупо вернуть на клиента ДвоичныеДанные
Швадратные Ктаны (не удержался :)) по документации ДвоичныеДанные не доступны в тонком
ДвоичныеДанные (BinaryData) Методы: Записать (Write) Конструкторы: На основании файла Описание: Значение содержит двоичные данные, которые считываются из файла. Значение может быть сохранено в ХранилищеЗначения. Хранимые данные могут быть записаны в файл. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {}. Имя типа XDTO: может быть любым из перечисленных: base64Binary, hexBinary
чтобы не быть голословным вот рабочий пример &НаСервере
а вот из 8.3 ДвоичныеДанные (BinaryData) Методы: Конструкторы: На основании файла Описание: Значение содержит двоичные данные, которые считываются из файла. Значение может быть сохранено в ХранилищеЗначения. Хранимые данные могут быть записаны в файл. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {}. Имя типа XDTO: может быть любым из перечисленных: base64Binary, hexBinary.
эва как, тогда мои пардоны, я безнадежно устарел, загнил так сказать на своей 8.2, которая так умеет
кстати, …Сериализуется. интересненько
конечно, иначе бы хрен бы мы его засунули во временное хранилище но сериализовать его в текст и передавать строкой конечно же менее эффективно чем ПолучитьФайл. Получить файл это простое двоичное копирование с сервера на клиент.
не забудь еще временный файл зачистить (УдалитьФайлы)
Интересно, почему в 8.3 у клиента отпилили ДД? Утоньшение тонкого клиента?
+на шаге 5 помещать во временное хранилище надо без указания идентификатора формы (2 параметр ПоместитьВоВременноеХранилище), это обеспечит удаление объекта из временного хранилища при следующем серверном вызове.
да херней занимаются, проповедуют идею: чтобы эти 1сники не писали не эффективный код (они ж тупые) мы их ограничим так чтобы написать его было нельзя.
функция ПолучитьИмяВременногоФайла(«dbf») возвращает что то вроде: C:Usersi907_1c_serviceAppDataLocalTempv8_CE67_f6dd.dbf А метод СоздатьФайл объект «XBase» требует имени файла не более 8 символов. Соответственно эта функция для этой задачи не подходит 🙁
дык переименуй прежде чем создавать xbase
ну значит получай имя каталога временных файлов, а имя файла придумай сам. Тут проблема будет только в том что имя может совпасть с другим файлом из другого сеанса. Например другой юзер в тот же момент будет выполнять ту же функцию. Можно сделать каталоги и менем из идентификатора сеанса например, чтобы гарантированно изолировать их друг от друга.
Всем спасибо за советы!!! Вообщем -то получилось, как описано , но на клиент я передаю объект ДвоичныеДанные и там его сохраняю т.е. временное хранилище не использую.
добро пожаловать в настоящую клиент-серверную среду =)
В 8.3 ДД нет на клиенте, но использовать его можно?
1С:Предприятие 8.3 (8.3.6.1999) Синтаксис: Записать(<ИмяФайла>) Параметры: Тип: Строка. Имя файла, в который необходимо записать двоичные данные. Если файл существует, он будет перезаписан, иначе — создан. Описание: Записывает двоичные данные в файл. Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Класс. Объект не доступен, его метод — доступен. 1С такая 1С
не это похоже в документации 8.3.5 ошибка, проверил — работает вроде =) но смотрите: только в тонком, в веб-клиенте (хз теперь уже, проверять надо) Ну и чрез ПолучитьФайл, конечно меньше будет информации передаваться т.к. не будет сериализации параметров в текст.
#65
by Провинциальный 1сник
А как тогда поступать, если надо наоборот с клиента передать файл на сервер?
Также, вроде разобрались что у клиента таки есть ДД
правильно: это использовать функцию ПоместитьФайл Это обеспечит работу и в веб-клиенте.
ДвоичныеДанные (BinaryData) На основании файла Синтаксис: Новый ДвоичныеДанные(<ИмяФайла>) Параметры: Тип: Строка. Имя файла, из которого будет загружено значение в виде двоичных данных. Описание: Создает объект и помещает в него двоичные данные, взятые из файла. В режиме веб-клиента недоступен.
но доверять СП надо осторожно 🙂
#70
by Провинциальный 1сник
Это от какой версии? У меня в 8.3.6.1977 написано что поддерживается и на тонком клиенте, и на веб-клиенте.
8.3.6.2041 — тут тоже доступно.
#73
by Провинциальный 1сник
Странно, да.. Похоже у 1с поменялись планы — хотели сначала отказаться от ДД на клиенте, а передумали)
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений’
Описание ошибки:
Ошибка при программировании, конфигурировании кода в 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)
Здравствуйте. В собственной конфигурации есть документ «ОбъектныйГрафик» с Тч «Задания». в которую входят реквизиты: ВыдающийОтдел — СправочникСсылка.Подразделения, Задание — СправочникСсылка.ЗаданияШаблон, ДеньВыдачи -целое число.
Справочник ЗаданияШаблон имеет структуру: Наименование содержит наименование задания, ДеньВыдачи(целое число) — порядковый номер рабочего дня выдачи задания. Хочу сделать, чтобы при добавлении строки в ТЧ при изменении реквизита «Задание» автоматически выводился День выдачи для этого задания. Делаю так:
| 1C | ||
|
В режиме предприятия я при изменении задания вылетает ошибка:
{Документ.ОбъектныйГрафик.Форма.ФормаДокумента.Фор ма(140)}: Ошибка при вызове метода контекста (ПолучитьДеньВыдачи)
ТекущаяСтрока.ДеньВыдачи=ПолучитьДеньВыдачи(Текуща яСтрока.ВыдающийОтдел,ТекущаяСтрока.Задание);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {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
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = РаботаСоСпискамиДокументовКлиент.ПолучитьДанныеТекущейСтрокиСписка(
Элементы.Список, Элементы.Список.ТекущаяСтрока);
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Поле = Элементы.Файлы Тогда
ОткрыватьЗакладкуФайлы=ПроверкаОткрытияЗаклФайлы(ЭтаФорма)
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуФайлы», ТекущиеДанные.Ссылка, ОткрыватьЗакладкуФайлы);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;
Если Поле = Элементы.ПодписанЭП Тогда
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуЭП», ТекущиеДанные.Ссылка, Истина);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;
Если Поле = Элементы.Задачи Тогда
ОткрытьФорму(«ОбщаяФорма.ПроцессыИЗадачи»,
Новый Структура(«Предмет», ТекущиеДанные.Ссылка),
ЭтаФорма);
Возврат;
КонецЕсли;
Если Поле = Элементы.ЕстьКатегории Тогда
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуКатегории», ТекущиеДанные.Ссылка, Истина);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;
Если Поле = Элементы.СостояниеКонтроля Тогда
КонтрольКлиент.ОбработкаКомандыКонтроль(ТекущиеДанные.Ссылка, ЭтаФорма);
Возврат;
КонецЕсли;
ПараметрыОткрытия = Новый Структура(«Ключ», ТекущиеДанные.Ссылка);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
КонецПроцедуры