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

   TARPV

30.06.15 — 12:03

Создаю на клиенте объект «XBase», затем передаю его в качестве параметра  в процедуру выполняемую на сервере, в ответ получаю следующее сообщение о ошибке:

{Форма.Форма.Форма(130)}: Ошибка при вызове метода контекста (СформироватьНаСервере)

        СформироватьНаСервере(ЭлементСпискаЗначений.Значение,xB);

по причине:

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

по причине:

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

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

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

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

по причине:

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

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

Что я делаю не правильно???

   itlikbez

1 — 30.06.15 — 12:21

(0) Все логично. Подумай сам — в чем смысл передачи параметра на сервер? По-твоему, база тоже на сервер «поедет»?

   Бубка Гоп

2 — 30.06.15 — 12:27

(0) объект не сериализуется, так просто между клиент сервером его не попинаешь. если не критично, лучше создавай сразу на сервере.

   KarpovDeniska

3 — 30.06.15 — 12:47

ПоместитьВоВременноеХранилище() ?

   TARPV

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) заполнить ты его можешь и должен только на клиенте, а вот данные для заполнения получишь на сервере

   TARPV

8 — 30.06.15 — 13:21

(6) ВыборкаИзРезультатаЗапроса не доступна на тонком клиенте и соответственно ее нельзя передать на клиент и использовать для заполнения объект «XBase».

Получается замкнутый круг. Передавать объект  «XBase» между клиентом и сервером нельзя, а как его тогда заполнить на клиенте по данным запроса не понятно!?

   Славен

9 — 30.06.15 — 13:23

(8) рукалицо

   EvgeniuXP

10 — 30.06.15 — 13:23

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

   TARPV

11 — 30.06.15 — 13:37

(10) При чем тут форма?

Вопрос про то, как объект «XBase» заполнить на сервере и вернуть на тонкий клиент, а там сохранить на жесткий диск.

   Господин ПЖ

12 — 30.06.15 — 13:39

(1) не. надо. этого. делать

   Господин ПЖ

13 — 30.06.15 — 13:39

(12) -> (11)

   Провинциальный 1сник

14 — 30.06.15 — 13:46

(11) Заполняй xbase на клиенте, а данные для заполнения доставай с сервера.

   Бубка Гоп

15 — 30.06.15 — 13:46

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

   Провинциальный 1сник

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

давно тз между клиентом и сервером ходить научили?

   Провинциальный 1сник

20 — 30.06.15 — 13:57

(19) Там ходит что-то урезанное, указанный пример — рабочий.

   Провинциальный 1сник

21 — 30.06.15 — 13:57

(20) Ой, извините, ошибся — проверил в толстом.

   Провинциальный 1сник

22 — 30.06.15 — 13:58

Ну тогда лепить список из структур — они поддерживаются в тонком..

   banco

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) Какой из методов РезультатаЗапроса доступен на клиенте?

   DmitrO

27 — 30.06.15 — 14:04

вы что тут мозг человеку выносите

1.сразу вызываешь серверную функцию

2.на сервере создаешь дбф файл с именем временного файла (ПолучитьИмяВременогоФайла)

3.заполняешь его данными

4.закрываешь файл

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

6.возвращаешь из функции адрес в хранилище

7.на клиенте функцией ПолучитьФайл размещаешь файл в ФС клиента

   DmitrO

28 — 30.06.15 — 14:04

(23)правильно

   mTema32

29 — 30.06.15 — 14:05

(25) Так это структура…

Может ошибаюсь, но вроде можно ТЗ пульнуть в реквизит формы и оттуда прочитать клиентом. Не?

   Бубка Гоп

30 — 30.06.15 — 14:07

(29) Нет

   hhhh

31 — 30.06.15 — 14:07

(29) да, просто создать реквизит формы ТЗ типа таблица значений. И он прекрасно виден и на клиенте и на сервере. М не надо никаких структурок.

   Бубка Гоп

32 — 30.06.15 — 14:08

(30) Вру, можно

   DmitrO

33 — 30.06.15 — 14:11

(31)можно, но только зачем? если проще все сделать на сервере и просто вернуть файл.

структуру дбф еще в реквизит формы закладывать придется.

   mTema32

34 — 30.06.15 — 14:14

(33) Да, на счет структуры дбф — согласен. Если там 100500 колонок то через файл может и проще.

   Бубка Гоп

35 — 30.06.15 — 14:15

ТС притих чего то

   TARPV

36 — 30.06.15 — 14:21

(27) 5.создаешь объект ДвоичныеДанные, указываешь имя своего врем. файла, помещаешь его во временное хранилище

А обязательно создавать объект ДвоичныеДанные? Без него временный файл нельзя поместить во временное хранилище?

   EvgeniuXP

37 — 30.06.15 — 14:21

зачем клиенту твой дбф-файл? Че он сним делать будет?

   EvgeniuXP

38 — 30.06.15 — 14:23

Смотреть? Редактировать? Или он хочет знать где лежит? Или его трясет что лежиь на сервере — а это секретные данные и только у него? Так сохрани ему на комп, упакуй и пароль поставь

   etc

39 — 30.06.15 — 14:25

(38) на дискетку запишет :)

   DmitrO

40 — 30.06.15 — 14:25

(36)нельзя. тебя это пугает? =)

   Бубка Гоп

41 — 30.06.15 — 14:26

(27) Кстати адрес в хранилище необязателен, можно тупо вернуть на клиента ДвоичныеДанные

   DmitrO

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»);

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

   DmitrO

45 — 30.06.15 — 14:33

(44)я знаю

   Бубка Гоп

46 — 30.06.15 — 14:33

(45) тогда почему (42) ?

   DmitrO

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) кстати, …Сериализуется.

интересненько

   DmitrO

50 — 30.06.15 — 14:40

(48)конечно, иначе бы хрен бы мы его засунули во временное хранилище

но сериализовать его в текст и передавать строкой конечно же менее эффективно чем ПолучитьФайл. Получить файл это простое двоичное копирование с сервера на клиент.

   DmitrO

51 — 30.06.15 — 14:41

(36)не забудь еще временный файл зачистить (УдалитьФайлы)

   Бубка Гоп

52 — 30.06.15 — 14:43

(50) Интересно, почему в 8.3 у клиента отпилили ДД? Утоньшение тонкого клиента?

   DmitrO

53 — 30.06.15 — 14:44

(36)+на шаге 5 помещать во временное хранилище надо без указания идентификатора формы (2 параметр ПоместитьВоВременноеХранилище), это обеспечит удаление объекта из временного хранилища при следующем серверном вызове.

   DmitrO

54 — 30.06.15 — 14:47

(52)да херней занимаются, проповедуют идею: чтобы эти 1сники не писали не эффективный код (они ж тупые) мы их ограничим так чтобы написать его было нельзя.

   Бубка Гоп

55 — 30.06.15 — 14:48

(54) Годная политика

   TARPV

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

   DmitrO

58 — 30.06.15 — 15:07

(56)ну значит получай имя каталога временных файлов, а имя файла придумай сам.

Тут проблема будет только в том что имя может совпасть с другим файлом из другого сеанса. Например другой юзер в тот же момент будет выполнять ту же функцию.

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

   TARPV

59 — 30.06.15 — 15:08

Всем спасибо за советы!!!

Вообщем -то получилось, как описано (27), но на клиент я передаю объект ДвоичныеДанные и там его сохраняю т.е. временное хранилище не использую.

   DmitrO

60 — 30.06.15 — 15:08

добро пожаловать в настоящую клиент-серверную среду =)

   Бубка Гоп

61 — 30.06.15 — 15:13

(59) В 8.3 ДД нет на клиенте, но использовать его можно?

   TARPV

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С

   DmitrO

64 — 30.06.15 — 15:28

(63)не это похоже в документации 8.3.5 ошибка, проверил — работает вроде =)

но смотрите: только в тонком, в веб-клиенте (хз теперь уже, проверять надо)

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

   Провинциальный 1сник

65 — 30.06.15 — 15:32

(63) А как тогда поступать, если надо наоборот с клиента передать файл на сервер?

   Бубка Гоп

66 — 30.06.15 — 15:33

(65) Также, вроде разобрались что у клиента таки есть ДД

   DmitrO

67 — 30.06.15 — 15:38

(65)правильно: это использовать функцию ПоместитьФайл

Это обеспечит работу и в веб-клиенте.

   DmitrO

68 — 30.06.15 — 15:40

ДвоичныеДанные (BinaryData)

На основании файла

Синтаксис:

Новый ДвоичныеДанные(<ИмяФайла>)

Параметры:

<ИмяФайла> (обязательный)

Тип: Строка.

Имя файла, из которого будет загружено значение в виде двоичных данных.

Описание:

Создает объект и помещает в него двоичные данные, взятые из файла.

В режиме веб-клиента недоступен.

   DmitrO

69 — 30.06.15 — 15:40

но доверять СП надо осторожно :)

   Провинциальный 1сник

70 — 30.06.15 — 15:53

(68) Это от какой версии? У меня в 8.3.6.1977 написано что поддерживается и на тонком клиенте, и на веб-клиенте.

   DmitrO

71 — 30.06.15 — 15:59

(70)8.3.5.1517

   mTema32

72 — 30.06.15 — 16:05

(70) 8.3.6.2041 — тут тоже доступно.

  

Провинциальный 1сник

73 — 30.06.15 — 16:26

Странно, да.. Похоже у 1с поменялись планы — хотели сначала отказаться от ДД на клиенте, а передумали)

  

TARPV

30.06.15 — 12:03

Создаю на клиенте объект «XBase», затем передаю его в качестве параметра  в процедуру выполняемую на сервере, в ответ получаю следующее сообщение о ошибке:

{Форма.Форма.Форма(130)}: Ошибка при вызове метода контекста (СформироватьНаСервере)

        СформироватьНаСервере(ЭлементСпискаЗначений.Значение,xB);

по причине:

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

по причине:

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

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

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

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

по причине:

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

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

Что я делаю не правильно???

  

itlikbez

1 — 30.06.15 — 12:21

(0) Все логично. Подумай сам — в чем смысл передачи параметра на сервер? По-твоему, база тоже на сервер «поедет»?

  

Бубка Гоп

2 — 30.06.15 — 12:27

(0) объект не сериализуется, так просто между клиент сервером его не попинаешь. если не критично, лучше создавай сразу на сервере.

  

KarpovDeniska

3 — 30.06.15 — 12:47

ПоместитьВоВременноеХранилище() ?

  

TARPV

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) заполнить ты его можешь и должен только на клиенте, а вот данные для заполнения получишь на сервере

  

TARPV

8 — 30.06.15 — 13:21

(6) ВыборкаИзРезультатаЗапроса не доступна на тонком клиенте и соответственно ее нельзя передать на клиент и использовать для заполнения объект «XBase».

Получается замкнутый круг. Передавать объект  «XBase» между клиентом и сервером нельзя, а как его тогда заполнить на клиенте по данным запроса не понятно!?

  

Славен

9 — 30.06.15 — 13:23

(8) рукалицо

  

EvgeniuXP

10 — 30.06.15 — 13:23

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

  

TARPV

11 — 30.06.15 — 13:37

(10) При чем тут форма?

Вопрос про то, как объект «XBase» заполнить на сервере и вернуть на тонкий клиент, а там сохранить на жесткий диск.

  

Господин ПЖ

12 — 30.06.15 — 13:39

(1) не. надо. этого. делать

  

Господин ПЖ

13 — 30.06.15 — 13:39

(12) -> (11)

  

Провинциальный 1сник

14 — 30.06.15 — 13:46

(11) Заполняй xbase на клиенте, а данные для заполнения доставай с сервера.

  

Бубка Гоп

15 — 30.06.15 — 13:46

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

  

Провинциальный 1сник

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

давно тз между клиентом и сервером ходить научили?

  

Провинциальный 1сник

20 — 30.06.15 — 13:57

(19) Там ходит что-то урезанное, указанный пример — рабочий.

  

Провинциальный 1сник

21 — 30.06.15 — 13:57

(20) Ой, извините, ошибся — проверил в толстом.

  

Провинциальный 1сник

22 — 30.06.15 — 13:58

Ну тогда лепить список из структур — они поддерживаются в тонком..

  

banco

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) Какой из методов РезультатаЗапроса доступен на клиенте?

  

DmitrO

27 — 30.06.15 — 14:04

вы что тут мозг человеку выносите

1.сразу вызываешь серверную функцию

2.на сервере создаешь дбф файл с именем временного файла (ПолучитьИмяВременогоФайла)

3.заполняешь его данными

4.закрываешь файл

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

6.возвращаешь из функции адрес в хранилище

7.на клиенте функцией ПолучитьФайл размещаешь файл в ФС клиента

  

DmitrO

28 — 30.06.15 — 14:04

(23)правильно

  

mTema32

29 — 30.06.15 — 14:05

(25) Так это структура…

Может ошибаюсь, но вроде можно ТЗ пульнуть в реквизит формы и оттуда прочитать клиентом. Не?

  

Бубка Гоп

30 — 30.06.15 — 14:07

(29) Нет

  

hhhh

31 — 30.06.15 — 14:07

(29) да, просто создать реквизит формы ТЗ типа таблица значений. И он прекрасно виден и на клиенте и на сервере. М не надо никаких структурок.

  

Бубка Гоп

32 — 30.06.15 — 14:08

(30) Вру, можно

  

DmitrO

33 — 30.06.15 — 14:11

(31)можно, но только зачем? если проще все сделать на сервере и просто вернуть файл.

структуру дбф еще в реквизит формы закладывать придется.

  

mTema32

34 — 30.06.15 — 14:14

(33) Да, на счет структуры дбф — согласен. Если там 100500 колонок то через файл может и проще.

  

Бубка Гоп

35 — 30.06.15 — 14:15

ТС притих чего то

  

TARPV

36 — 30.06.15 — 14:21

(27) 5.создаешь объект ДвоичныеДанные, указываешь имя своего врем. файла, помещаешь его во временное хранилище

А обязательно создавать объект ДвоичныеДанные? Без него временный файл нельзя поместить во временное хранилище?

  

EvgeniuXP

37 — 30.06.15 — 14:21

зачем клиенту твой дбф-файл? Че он сним делать будет?

  

EvgeniuXP

38 — 30.06.15 — 14:23

Смотреть? Редактировать? Или он хочет знать где лежит? Или его трясет что лежиь на сервере — а это секретные данные и только у него? Так сохрани ему на комп, упакуй и пароль поставь

  

etc

39 — 30.06.15 — 14:25

(38) на дискетку запишет :)

  

DmitrO

40 — 30.06.15 — 14:25

(36)нельзя. тебя это пугает? =)

  

Бубка Гоп

41 — 30.06.15 — 14:26

(27) Кстати адрес в хранилище необязателен, можно тупо вернуть на клиента ДвоичныеДанные

  

DmitrO

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»);

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

  

DmitrO

45 — 30.06.15 — 14:33

(44)я знаю

  

Бубка Гоп

46 — 30.06.15 — 14:33

(45) тогда почему (42) ?

  

DmitrO

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) кстати, …Сериализуется.

интересненько

  

DmitrO

50 — 30.06.15 — 14:40

(48)конечно, иначе бы хрен бы мы его засунули во временное хранилище

но сериализовать его в текст и передавать строкой конечно же менее эффективно чем ПолучитьФайл. Получить файл это простое двоичное копирование с сервера на клиент.

  

DmitrO

51 — 30.06.15 — 14:41

(36)не забудь еще временный файл зачистить (УдалитьФайлы)

  

Бубка Гоп

52 — 30.06.15 — 14:43

(50) Интересно, почему в 8.3 у клиента отпилили ДД? Утоньшение тонкого клиента?

  

DmitrO

53 — 30.06.15 — 14:44

(36)+на шаге 5 помещать во временное хранилище надо без указания идентификатора формы (2 параметр ПоместитьВоВременноеХранилище), это обеспечит удаление объекта из временного хранилища при следующем серверном вызове.

  

DmitrO

54 — 30.06.15 — 14:47

(52)да херней занимаются, проповедуют идею: чтобы эти 1сники не писали не эффективный код (они ж тупые) мы их ограничим так чтобы написать его было нельзя.

  

Бубка Гоп

55 — 30.06.15 — 14:48

(54) Годная политика

  

TARPV

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

  

DmitrO

58 — 30.06.15 — 15:07

(56)ну значит получай имя каталога временных файлов, а имя файла придумай сам.

Тут проблема будет только в том что имя может совпасть с другим файлом из другого сеанса. Например другой юзер в тот же момент будет выполнять ту же функцию.

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

  

TARPV

59 — 30.06.15 — 15:08

Всем спасибо за советы!!!

Вообщем -то получилось, как описано (27), но на клиент я передаю объект ДвоичныеДанные и там его сохраняю т.е. временное хранилище не использую.

  

DmitrO

60 — 30.06.15 — 15:08

добро пожаловать в настоящую клиент-серверную среду =)

  

  

Бубка Гоп

61 — 30.06.15 — 15:13

(59) В 8.3 ДД нет на клиенте, но использовать его можно?

  

TARPV

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С

  

DmitrO

64 — 30.06.15 — 15:28

(63)не это похоже в документации 8.3.5 ошибка, проверил — работает вроде =)

но смотрите: только в тонком, в веб-клиенте (хз теперь уже, проверять надо)

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

  

Провинциальный 1сник

65 — 30.06.15 — 15:32

(63) А как тогда поступать, если надо наоборот с клиента передать файл на сервер?

  

Бубка Гоп

66 — 30.06.15 — 15:33

(65) Также, вроде разобрались что у клиента таки есть ДД

  

DmitrO

67 — 30.06.15 — 15:38

(65)правильно: это использовать функцию ПоместитьФайл

Это обеспечит работу и в веб-клиенте.

  

DmitrO

68 — 30.06.15 — 15:40

ДвоичныеДанные (BinaryData)

На основании файла

Синтаксис:

Новый ДвоичныеДанные(<ИмяФайла>)

Параметры:

<ИмяФайла> (обязательный)

Тип: Строка.

Имя файла, из которого будет загружено значение в виде двоичных данных.

Описание:

Создает объект и помещает в него двоичные данные, взятые из файла.

В режиме веб-клиента недоступен.

  

DmitrO

69 — 30.06.15 — 15:40

но доверять СП надо осторожно :)

  

Провинциальный 1сник

70 — 30.06.15 — 15:53

(68) Это от какой версии? У меня в 8.3.6.1977 написано что поддерживается и на тонком клиенте, и на веб-клиенте.

  

DmitrO

71 — 30.06.15 — 15:59

(70)8.3.5.1517

  

mTema32

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

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

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)

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

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’

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сергей

Местный

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

#10

0

28.06.2022 13:36:40

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

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

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

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

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

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

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

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

Создаю на клиенте объект «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

Комментарии доступны только авторизированным пользователям

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

Автор 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<Рост)  Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Очень_Высокий; КонецЕсли;
КонецЦикла;
  Возврат  КритерийРоста;
КонецФункции


Вопрос решен, всем спасибо.


В управляемых формах может появиться следующая ошибка:

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

С данной ошибкой я столкнулся, когда пытался в управляемой форме на стороне сервера выполнить следующую команду:

 ОбъектФормы = РеквизитФормыВЗначение("Объект");
 ТЗВывода = ОбъектФормы.Бонусы.Выгрузить().Скопировать();
 ЗначениеВРеквизитФормы(ОбъектФормы, "Объект");

Решением данной проблемы было обнулить переменную с таблицей данных:

ТЗВывода = Неопределено;

  • Ошибка отображения типов отсутствует отображение для типа comобъект
  • Ошибка отображения пространства имен отсутствует отображение для префикса
  • Ошибка отображения оверлейной программы steam heroes and generals
  • Ошибка отношения к нам жизненный пример
  • Ошибка отношение уже существует postgresql