|
Как передать реквизит формы "ДеревоЗначений" на сервер? | ☑ | ||
|---|---|---|---|---|
|
0
Mobilis77
13.09.26
✎
12:38
|
Уважаемый ALL, прошу помочь, возможно с примитивным вопросом, но не могу понять, что делаю не так. Имеется форма, В ней добавлен реквизит ФормаДерево с типом "ДеревоЗначений". Пытаюсь передать это дерево на сервер для дальнейшей его обработки (считывания данных из него).
&НаСервере Функция ОбработатьДеревоНаСервере(ДеревоФормы) Дерево = РеквизитФормыВЗначение(ДеревоФормы, Тип("ДеревоЗначений") ); КонецФункции &НаКлиенте Процедура СоздатьДокументИзДерева(Команда) ОбработатьДеревоНаСервере(ФормаДерево); КонецПроцедуры В результате получаю ошибку в серверной функции: Несоответствие типов параметр 1. Хотя в отладчике ДеревоФормы имеет тип ДанныеФормыДерево. Что делаю не так? |
|||
|
1
Mobilis77
13.09.26
✎
12:33
|
Отладчик
|
|||
|
2
Dirk Diggler
13.09.26
✎
12:45
|
ЕМНИП тз и дз плохо сериализуются. Перед передачей в многоуровневый массив структур надо превращать.
|
|||
|
3
Сергиус
13.09.26
✎
12:53
|
(0)А если попробовать через ДанныеФормыВЗначение?
|
|||
|
4
Mobilis77
13.09.26
✎
12:59
|
(3) Дружище, спасибо, сработало.
|
|||
|
5
Mobilis77
13.09.26
✎
14:37
|
Не тут то было. На сервере дерево формируется, можно его обрабатывать. Но, даже если в серверной процедуре только
&НаСервере
Функция ОбработатьДеревоНаСервере(ДеревоФормы)
Дерево = ДанныеФормыВЗначение(ДеревоФормы, Тип("ДеревоЗначений") );
КонецФункции
То по окончанию процедуры на клиенте ошибка: Нельзя изменять поле, содержащее объект данных формы [ОшибкаИспользованияВстроенногоЯзыка] |
|||
|
6
Garykom
гуру
13.09.26
✎
19:03
|
Подучи уже теорию
Если у тебя &НаСервере (не &НаСервереБезКонтекста) то и ТЗ и ДЗ (когда они реквизиты формы) есть и на клиенте и на сервере - ничего никуда через параметры процедуры/функции передавать не надо! Если конечно не в другой общий модуль например передавать Только есть не в виде ТЗ или ДЗ а в виде ДанныеФормыКоллекция или ДанныеФормыДерево Т.е. с этим вот твоим реквизитом формы ДеревоФормы можно работать на сервере (на клиенте тоже но урезано) напрямую как с коллекцией Либо можно там же на сервере сделать РеквизитФормыВЗначение и превратить ДанныеФормыДерево (для ТЗ ДанныеФормыКоллекция) в настоящее ДеревоЗначений (или ТаблицуЗначений) Работать с ДЗ как угодно а затем сделать обратно ЗначениеВРеквизитФормы ДанныеФормыВЗначение/ЗначениеВДанныеФормы примерно тоже самое что и РеквизитФормыВЗначение/ЗначениеВРеквизитФормы но работает еще и &НаСервереБезКонтекста |
|||
|
7
Garykom
гуру
13.09.26
✎
19:09
|
А еще лучше после 1С 7.7 перед тем как приступать к изучению 1С 8 УФ
Сначала вкратце изучить веб и браузерные технологии Ну вот эти HTML/CSS и JavaScript на фронте (клиенте) и с любым языком на бэке (сервере), можно даже PHP как основу или сразу Golang или Python Это быстро по верхам пробежаться и попробовать сваять нечто простое в виде клиента и сервера Но зато потом будет все понятно откуда вытекло такое сложное в УФ |
|||
|
8
Mobilis77
13.09.26
✎
22:29
|
(6) Спасибо за науку. Занимаюсь кодом не часто, совсем забыл что &НаСервере "пакует" и передает форму тоже. Может подскажете как передать реквизит формы (тип деревоЗначений) в процедуру &НаСервереБезКонтекста ?
|
|||
|
9
Сергиус
13.09.26
✎
22:45
|
(8)Какая цель перебора строк дерева? Так то можно его и на клиенте обойти через ПолучитьЭлементы()
|
|||
|
10
Сергиус
13.09.26
✎
22:49
|
+(9)Так то вам правильно про массив структур подсказали в (2). Либо работайте в контексте формы с ним
|
|||
|
11
Garykom
гуру
13.09.26
✎
23:01
|
(8)
&НаСервере "пакует" и передает форму тоже
Нифига, форма с контекстом всегда и на сервере и на клиенте ибо там Stateful а не Stateless И постоянная синхронизация, если умудрился разорвать ее - будет ошибка платформы Передача с клиента с паковкой это как раз если &НаСервереБезКонтекста делать в том же модуле формы Или вызывать с клиента УФ методы в других (не самой формы) модулях серверных, где разрешен вызов сервера с клиента |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |