|
Ошибка передачи данных между клиентом и сервером. Ошибка преобразования данных XDTO. | ☑ | ||
---|---|---|---|---|
0
Ilnazio
14.06.20
✎
14:59
|
Доброго времени суток. Просьба не кидаться тухлыми помидорами, только учусь :) Т.к. учусь опишу задачу, вдруг совсем неправильно подхожу к ее решению.
Задача такая: необходимо открыть форму выбора справочника с отбором. Для этого получаю данные отбора из регистра запросом. С клиентской процедуры решил использовать функцию на сервере, которая вернет массив запроса. В последующем результат я обработаю уже на клиенте и открою форму с отбором. В момент возвращения массива на клиентскую процедуру возникает ошибка, довольно длинная: //НачалоОшибки Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'ret': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}ret по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'Value': форма: Элемент имя: {http://v8.1c.ru/8.1/data/core}Value по причине: Ошибка отображения типов: Отсутствует отображение для типа 'СтрокаТаблицыЗначений' по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'ret': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}ret по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'Value': форма: Элемент имя: {http://v8.1c.ru/8.1/data/core}Value по причине: Ошибка отображения типов: Отсутствует отображение для типа 'СтрокаТаблицыЗначений' //Конецошибки Сам код: &НаСервере Функция Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура КАК Номенклатура, | алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.АлкогольнаяПродукция КАК АлкогольнаяПродукция |ИЗ | РегистрСведений.алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры КАК алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры | |СГРУППИРОВАТЬ ПО | алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.Номенклатура, | алкСоответствияАлкогольнойПродукцииЕГАИСИНоменклатуры.АлкогольнаяПродукция"; Запрос.УстановитьПараметр("Наименование", СтрокаСАлкПрод); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); ПараметрыОтбора = Новый Структура(); ПараметрыОтбора.Вставить("АлкогольнаяПродукция",СтрокаСАлкПрод); НайденныеСтроки = РезультатЗапроса.НайтиСтроки(ПараметрыОтбора); Возврат(НайденныеСтроки); КонецФункции &НаКлиенте Процедура Бит_ТоварыНоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) НайденныеСтроки = "ы"; ТекДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные; СтрокаСАлкПрод = ТекДанные.АлкогольнаяПродукция; СтандартаяОбработка = ложь; Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод); ПараметрыОтбораФормы = Новый Структура(); Для каждого стр из НайденныеСтроки Цикл Значение = стр.Номенклатура; ПараметрыОтбораФормы.Вставить("Номенклатура",Значение); КонецЦикла; ПараметрыОтбораФормы = ПолучитьИзВременногоХранилища(АдресХранилища); Форма = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",ПараметрыОтбораФормы); Форма.Открыть(); КонецПроцедуры ну ругайтесь, пожалуйста. облазил сколько смог перед тем как зарегаться тут |
|||
1
Ilnazio
14.06.20
✎
15:02
|
Да еще и код не выделился..
|
|||
2
H A D G E H O G s
14.06.20
✎
15:17
|
Передача Таблицы значений между сервером и клиентом недоступна
|
|||
3
Ilnazio
14.06.20
✎
15:18
|
(2) НайденныеСтроки - массив, в отладке смотрел. Читал что вроде его передавать можно
|
|||
4
Cthulhu
14.06.20
✎
15:19
|
Отсутствует отображение для типа 'СтрокаТаблицыЗначений'
- значения типа 'СтрокаТаблицыЗначений', 'ТаблицаЗначений' - НЕ сериализуются! (и согласно мануалу и реализации - не существуют в клиенте, хотя в принципе можно и извратиться создать и использовать их - но это лирика не по теме) |
|||
5
Cthulhu
14.06.20
✎
15:20
|
(3): значит в массиве есть значение такого типа... а как ты хотел - для передачи коллекции значений сериализутся все элементы коллекции
|
|||
6
Ilnazio
14.06.20
✎
15:27
|
(5) Действительно в массиве хранятся значения типа "СтрокаТаблицыЗначений". Какой выход из ситуации? как можно вернуть инфу на клиент?
|
|||
7
H A D G E H O G s
14.06.20
✎
15:57
|
(6) Преобразуй в Структуру
|
|||
8
Ilnazio
14.06.20
✎
17:16
|
(7) Преобразовал в структуру в функции на сервере, до вызова функции в процедуре объявил Переменную ПараметрыОтбораФормы, иначе ругался. В момент возвращения в процедуру значения ПараметрыОтбораФормы = неопределенно становится. По идее структуру можно же с сервера на клиент возвращать?
|
|||
9
RomaH
naïve
15.06.20
✎
06:45
|
(8)
Перем ПараметрыОтбораФормы; вот это тебя подвело зачем оно тебе? |
|||
10
ДенисЧ
15.06.20
✎
06:48
|
"ПараметрыОтбораФормы = Новый Структура();
Для каждого стр из НайденныеСтроки Цикл Значение = стр.Номенклатура; ПараметрыОтбораФормы.Вставить("Номенклатура",Значение); КонецЦикла; " Извините, а сегодня точно не пятница, а понедельник? |
|||
11
Kashey
15.06.20
✎
09:54
|
(0) Можете расписать подробнее, что хотите реализовать? Есть мнение, что Ваш подход неверный в корне.
|
|||
12
Ilnazio
15.06.20
✎
11:13
|
(10) воскресенье + неопытный я)) Дай совет дай зеленому, пожалуйста
|
|||
13
Ilnazio
15.06.20
✎
11:13
|
(9) Перем поставил из-за того что он ругается. ошибка: Переменная не определена (ПараметрыОтбораФормы)
|
|||
14
ДенисЧ
15.06.20
✎
11:21
|
(12) Покрасься
Надеюсь, ты понимаешь, что каждое Вставить в структуру перезаписывает существующее значение? |
|||
15
Ilnazio
15.06.20
✎
11:21
|
(11) В ТЧ обработке устанавливается соответствие между (АП) алкогольной продукцией(пришла из егаиса) и номенклатурой в 1С. В случае когда одной АП соответствует несколько позиции номенклатуры 1С нужно открыть форму выбора справочника номенклатура с предложенным списком вариантов на основе регистра сведений. В регистре сведений прописывается связка всех соответствии АП-номенклатура.
В табличной части где нужно выбрать номенклатуру я получил АП, далее по этому АП нашел все связки запросом и получил массив (НайденныеСтроки). Чтобы открыть форму с отбором вроде как нужно иметь структуру с одной колонкой - нашими параметрами отбора. На данный момент столкнулся с несколькими проблемами: 1) не могу вернуть хоть какую-то инфу серверной функцией. 2) пробовал параметры руками проставлять(тестировал смогу открыть форму выбора с желаемыми позициями или нет) - тоже не получилось задуманное. |
|||
16
Ilnazio
15.06.20
✎
11:22
|
(14) Да, это понимаю) в отладке сразу обратил внимание. Простого человеческого добавить нету же(
|
|||
17
ДенисЧ
15.06.20
✎
11:23
|
(16) Куда добавить? Структура - она по определению - с уникальными ключами...
|
|||
18
D_E_S_131
15.06.20
✎
11:27
|
1. Ищи в запросе сразу по строке "АлкогольнаяПродукция" нужную Номенклатуру.
2. Найденные значения выгружай в массив и этот массив уже возвращай на клиента. 3. На открываемую форму так же передавай свой массив в отдельный параметр. 4. В открываемой форме в ПриСозданииНаСервере сделай установку отбора на основании переданного параметра формы. |
|||
19
Ilnazio
15.06.20
✎
11:41
|
(17) Тогда вопрос на засыпку: Есть одномерный массив с 2-3 элементами. Как можно его превратить в структуру?)
|
|||
20
D_E_S_131
15.06.20
✎
11:42
|
(19) Зачем тебе что-то во что-то превращать вообще?
|
|||
21
dezss
15.06.20
✎
11:46
|
(0)
НайденныеСтроки = РезультатЗапроса.Скопировать(ПараметрыОтбора); МассивСтрок = ОбщегоНазначения.ТаблицаЗначенийВМассив(НайденныеСтроки); |
|||
22
dezss
15.06.20
✎
11:47
|
(21) + это написать вместо
НайденныеСтроки = РезультатЗапроса.НайтиСтроки(ПараметрыОтбора); Ну и возвращать МассивСтрок; |
|||
23
Kashey
15.06.20
✎
12:05
|
(15) По запросу - параметр "Наименование" запроса устанавливаете, а в запросе не фильтруете по нему. Выбираются все записи регистра сведений. Ещё не увидел куда результат функции возвращается на клиенте. Из результата запроса формируете структуру с нужной номенклатурой и возвращаете на клиент. На клиенте полученую структуру помещаете в параметры отбора формы перед её открытием. Должно всё получиться.
|
|||
24
Ilnazio
15.06.20
✎
12:24
|
(22) Спасибо большое, учту
|
|||
25
Ilnazio
15.06.20
✎
12:26
|
(23) Спасибо. Да с запросом косяк был, переделал. Не понял немного вас:"Ещё не увидел куда результат функции возвращается на клиенте" А как нужно отобразить куда результат функции возвращается?
|
|||
26
Ilnazio
15.06.20
✎
12:29
|
(20) При открытии формы необходима структура в качестве параметра отбора. А я получаю по сути массив... Или как-то можно массивом отвертеться?
В сп: <Параметры> (необязательный) Тип: Структура. |
|||
27
Kashey
15.06.20
✎
12:38
|
(25) вызываете функцию, её результат нужно поместить в переменную, иначе нужно использовать процедуру. Как-то так:
НайденныеСтроки = Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод); А НайденныеСтроки потом уже обрабатывать как требуется. |
|||
28
Ilnazio
15.06.20
✎
12:51
|
(27) Понял, спасибо огромное Вам! Можете, пожалуйста, посмотреть (26) сообщение, может сходу идея появится какая-нибудь...
|
|||
29
Kashey
15.06.20
✎
13:18
|
(28)Поместить список номенклатуры в список значений СЗ. Передать его как параметр отбора в форму выбора.
СтрСписок = Новый Структура("Ссылка", СЗ); ПараметрыФормы = Новый Структура("Отбор", СтрСЗ); ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы); |
|||
30
Kashey
15.06.20
✎
13:24
|
Либо установить отбор в запросе динамического списка в форме выбора и передавать список номенклатуры в неё. При создании на сервере заполнять параметр запроса динамического списка.
|
|||
31
Ilnazio
15.06.20
✎
13:59
|
(30) Спасибо большое за советы, дошел до финала - открытие формы. Не разобрался моментом как из массива получить структуру.
Бьет ошибку несоответствие типов. передается массив, ожидает увидеть структуру. |
|||
32
Ilnazio
15.06.20
✎
13:59
|
(18) Тоже спасибо сказал все по делу, но все-таки для открытия формы необходима структура. Массив передаю - выдает ошибку несоответствие типов(
|
|||
33
Ilnazio
15.06.20
✎
14:00
|
(29) Вроде тут описали схему без мудреных для меня на данный момент динамических списков. Можете, пожалуйста, подробнее рассказать?
|
|||
34
Ilnazio
15.06.20
✎
14:10
|
https://makrus.ru/chastye-voprosy-po-1s/kak-otkryt-formu-vybora-s-opredelennym-otborom-v-1s-82.html
Вот здесь хороший пример есть для обычных форм. Второй кусок кода демонстрирует проверку при отборе ВидСравнение.Всписке. То что нужно, но для УФ надо такое же( |
|||
35
Kashey
15.06.20
✎
14:16
|
(30) Если вариант из (29) - ваша функция должна вернуть список значений (не массив), который вы и поместите в структуру для передачи в форму подбора.
|
|||
36
Ilnazio
15.06.20
✎
14:30
|
(35) У вас в коде или ошибка или я пробка.. я, конечно, склоняюсь ко второму варианту, но уточню:
По коду: СЗ - список значений. СтрСписок - теперь структура из нашего массива. ПараметрыФормы - новая структура из какого-то СтрСЗ? я связь потерял |
|||
37
Ilnazio
15.06.20
✎
14:30
|
(36) СтрСписок - теперь структура из нашего *СпискаЗначений*, опечатку допустил
|
|||
38
Kashey
15.06.20
✎
14:35
|
(37) Да, ошибка. СтрСЗ = СтрСписок
|
|||
39
D_E_S_131
15.06.20
✎
14:36
|
(32) А какой тип у параметра формы поставил? Произвольный?
|
|||
40
D_E_S_131
15.06.20
✎
14:48
|
Хотя как рекомендовано в (29) сделать более правильно и изящнее.
|
|||
41
craxx
15.06.20
✎
14:54
|
(0) Индексы строк передавай, а не сами строки
ЭтаФорма.ТекущийЭлемент.ТекущаяСтрока |
|||
42
Ilnazio
15.06.20
✎
14:56
|
(38) (40) (41) Сделал как в 29, все отрабатывает, но уходит в типовой код и открывает совсем другую форму.
Видимо не достаточно что стоит стандартная обработка = ложь |
|||
43
Ilnazio
15.06.20
✎
14:58
|
(42) Причем открывает две формы, типовую что должна открыться и то что я вызываю, только то что я вызвал уходит в типовой код и в коде я отловил момент когда моя форма подменяется другой. По итогу открываются две формы, обе не мои)
|
|||
44
Kashey
15.06.20
✎
15:03
|
(43) СтандартаяОбработка = ложь;
|
|||
45
D_E_S_131
15.06.20
✎
15:03
|
(43) А что у тебя здесь - "Бит_ТоварыНоменклатураНачалоВыбораНаСервере(СтрокаСАлкПрод)"?
|
|||
46
Kashey
15.06.20
✎
15:04
|
(43) Внимательно прочтите имя переменной
|
|||
47
Ilnazio
15.06.20
✎
15:12
|
(45) Функция которая вернула СписокЗначений
|
|||
48
D_E_S_131
15.06.20
✎
15:18
|
"...и в коде я отловил момент когда моя форма подменяется другой." - этот код ПриОткрытии формы выбора срабатывает?
|
|||
49
Kashey
15.06.20
✎
15:19
|
(47) Зачем наименование выбираете в запросе? Ссылка нужна. А в секции ГДЕ как раз наименование нужно, похоже, а не ссылка ))
|
|||
50
Ilnazio
15.06.20
✎
15:20
|
(46) Да, моя невнимательность была. Теперь же форма открывается одна - моя. Точнее пытается открыться, но в процессе заменяется типовой формой другой, то есть проходит в типовую процедуру сразу же после выполнения команды открытьформу.
Заметил что как только выхожу из своей процедуры стандартная обработка автоматом проставляется "Истина"! сцуко... Попадает в следующую процедуру:
Вот тут замена идет
|
|||
51
Ilnazio
15.06.20
✎
15:21
|
(49) там все работает)) ну я посмотрю что вы имеете в виду)
|
|||
52
D_E_S_131
15.06.20
✎
15:25
|
Открывай через "ОткрытьФорму("Справочник.Номенклатура.Формы.ФормаВыбора", ПараметрыФормы)", если она не заработает в режиме выбора, то придется через ПолучитьФорму() сделать и установить ей режим выбора, закрытие при выборе и т.п.
|
|||
53
Cthulhu
15.06.20
✎
15:33
|
||||
54
Cthulhu
15.06.20
✎
15:34
|
(53) - готовый код тз в структуру
|
|||
55
Kashey
15.06.20
✎
15:45
|
(51) А форму выбора самостоятельно добавляли? Если да, то нужно указать в первом параметре ОткрытьФорму() её имя.
|
|||
56
Ilnazio
15.06.20
✎
15:56
|
(52) Отрабатывает нормально, спасибо. Но форма выбора открывается пустой, без списка номенклатуры. Также стандартнаяобработка после выхода из моей процедуры меняется на Истину.
|
|||
57
Ilnazio
15.06.20
✎
16:07
|
(55) Открываю самостоятельно, имя прописываю.
Если прописываю Справочник.Номенклатура.ФормаВыбора - моя форма заменяется другой. Если же Справочник.Номенклатура.Форма.ФормаВыбора, то открывается нужная форма, но пустая
|
|||
58
D_E_S_131
15.06.20
✎
16:10
|
"Но форма выбора открывается пустой, без списка номенклатуры" - смотреть отладчиком какие данные (и каких типов) получились в СЗ.
"Также стандартнаяобработка после выхода из моей процедуры меняется на Истину." - в смысле "после выхода"? Куда вышло? Может в том месте уже свой параметр СтандартнаяОбработка? |
|||
59
Kashey
15.06.20
✎
16:10
|
(57) См. 49, нужна ссылка
|
|||
60
Ilnazio
15.06.20
✎
17:17
|
(59) Действительно - проблема в ссылке была. Задача решена, всем огромное спасибо. Рабочий код прилагается
|
|||
61
Ilnazio
15.06.20
✎
17:17
|
(59) Сколько в сфере 1с работаете если не секрет?)
|
|||
62
D_E_S_131
15.06.20
✎
17:25
|
(60) Еще в условии "ГДЕ" ссылку сравниваешь с чем, опять со строкой?
|
|||
63
Ilnazio
15.06.20
✎
17:28
|
(62) Нет, там ссылка приходит.
|
|||
64
Ilnazio
15.06.20
✎
17:29
|
(59) (62) Короч нифига не все)) отбор произведен, но номенклатура не выбирается из списка.. сцуко, рано обрадовался
|
|||
65
D_E_S_131
15.06.20
✎
17:57
|
(64) см. второй вариант в (52). :)
|
|||
66
Kashey
15.06.20
✎
18:02
|
(64) В открываемой форме элемент формы Список - в свойствах режим выбора стоит?
|
|||
67
Ilnazio
16.06.20
✎
09:55
|
(66) Не очень понял где смотреть. Форму которую открываю - типовая. Есть подозрения что не задана форма владельца и значение тупо не возвращается, может быть такое?
|
|||
68
Ilnazio
16.06.20
✎
10:33
|
(66) Проблему решил, передал владельцем элемент откуда вызывалась процедура, значение возвращает. Но если же объясните что вы имели в виду будет полезно для общего развития.
Для будущих поколений: дополнил строчку открытия формы ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", ПараметрыФормы,Элемент); |
|||
69
D_E_S_131
16.06.20
✎
10:39
|
"Есть подозрения что не задана форма владельца..." - это не подозрение, а факт судя по вашему коду. Еще так же полезно настроить режим открытия окна формы (последний параметр метода ОткрытьФорму()).
|
|||
70
Ilnazio
16.06.20
✎
10:53
|
(69) Спасибо) Чем он помогает?
|
|||
71
D_E_S_131
16.06.20
✎
11:13
|
(70) Ну если использовать режим БлокироватьОкноВладельца, то выбор элемента будет более естественным.
|
|||
72
Ilnazio
16.06.20
✎
11:34
|
(71) Понял, протестирую
|
|||
73
Kashey
16.06.20
✎
11:44
|
(66) Если коротко - есть форма списка, есть форма выбора. Поведение отличается, хотел уточнить что используете именно форму выбора. Для общего развития рекомендую изучить работу с управляемыми формами, там очень много нюансов. Нахрапом не возьмёшь, нужно именно понимание.
|
|||
74
Ilnazio
17.06.20
✎
11:59
|
(73) Понял, изучу. спасибо большое) Есть какие-либо источники которые с уверенностью можете посоветовать?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |