![]() |
![]() |
![]() |
|
взаимодействие клиент-сервер | ☑ | ||
---|---|---|---|---|
0
Антон Чехов
28.12.09
✎
12:54
|
Подскажите, как правильно реализовать следующую задачу:
1) в управляемой форме документа необходимо по нажатию кнопки выполнить запрос (передаем управление на сервер) 2) на сервере выполняем запрос, по результатам которого необходимо задать один или несколько вопросов пользователю (необходимо вернуться на клиент) 3) по результатам ответов необходимо выполнить некоторые действия с данными (на сервере) |
|||
1
EasyRider
28.12.09
✎
13:38
|
И в чем вопрос?
|
|||
2
Антон Чехов
28.12.09
✎
13:39
|
(1) в серверной процедуре пытаюсь вызвать клиентскую (чтоб задать вопрос) - не обнаруживает. пишет ошибку
|
|||
3
vmv
28.12.09
✎
13:47
|
(2) в синтаксис-помошнике выставь только флажок "сервер" и попрообуй найти там метод "Вопрос". Сервер делает примерно тоже самое
|
|||
4
EasyRider
28.12.09
✎
13:54
|
(2)Вопрос не доступен на сервере.Вопрос надо делать на клиенте,а его результат потом опять передавать на сервер,если уж так надо.
|
|||
5
EasyRider
28.12.09
✎
13:56
|
(2)Вообще в СП в описании конструкций написано где они доступны.Если про вопрос написано: Доступность: клиент, тонкий клиент, веб-клиент ,то и вызвать его можно только на клиенте
|
|||
6
Антон Чехов
28.12.09
✎
13:58
|
вопрос в том, как передать управление обратно с сервера на клиент. При этом надо передать определенные данные (ссылки на справочники например)
|
|||
7
ptiz
28.12.09
✎
13:59
|
(6) Ну и передавай обратно ссылки, обычный возврат значений функцией.
|
|||
8
Антон Чехов
28.12.09
✎
14:00
|
(3) на сервере вопросы недоступны.
(4)(5) но текст вопроса зависит от данных, которые доступны только на сервере |
|||
9
EasyRider
28.12.09
✎
14:04
|
(8)Сделать функцию,доступную на клиенте и вызывать ее на сервере
|
|||
10
Антон Чехов
28.12.09
✎
14:05
|
(7) пробовал ТЗ вернуть на клиент, не вышло. Выборку тоже не дало.
ссылки попробую. спасибо остались вопросы: 1) как вернуть ТЗ с сервера на клиент 2) почему в серверной процедуре (расположена в форме) нельзя вызвать клиентскую процедуру, расположенную в этой же форме |
|||
11
Антон Чехов
28.12.09
✎
14:07
|
(9) вот не дает так сделать, надо бы покурить области видимости процедур/функций в 8.2
|
|||
12
EasyRider
28.12.09
✎
14:10
|
(8)Ну а нельзя выполнить функцию на сервере,передать ее результат на клиент,и по этому результату сформировать вопрос,а потом опять вызвать что-то на сервере? пс: в (9) фигня
|
|||
13
Антон Чехов
28.12.09
✎
14:12
|
(12) застопорился на том, как передать результат на клиент в один заход? в каком виде?
|
|||
14
Axel2009
28.12.09
✎
14:14
|
(13) в один заход никак. или заранее все подготовительные шаги, или без шагов.
|
|||
15
hhhh
28.12.09
✎
14:14
|
(13) думаю: в виде текста вопроса. То есть строка.
|
|||
16
Jolly Roger
28.12.09
✎
14:14
|
(13) текст запроса нельзя сформировать на сервере?
|
|||
17
EasyRider
28.12.09
✎
14:21
|
Это в форме:
&НаКлиенте Процедура ПриОткрытии(Отказ) Режим = РежимДиалогаВопрос.ДаНет; Ответ = Вопрос("Да или нет?", Режим, 0); Если Ответ = КодВозвратаДиалога.Нет Тогда Предупреждение(РаботаСДиалогами.Сообщ("Нет")); Иначе Предупреждение(РаботаСДиалогами.Сообщ("Да")); КонецЕсли; КонецПроцедуры А это в общем модуле РаботаСДиалогами с доступностью клиент,тонкий клиент,веб-клиент: |
|||
18
EasyRider
28.12.09
✎
14:21
|
&НаСервере
Функция Сообщ(Текст) Экспорт Возврат Строка(Текст+" привет с сервера"); КонецФункции |
|||
19
Axel2009
28.12.09
✎
14:22
|
(18) тока вернет, когда код сервера дойдет до конца процедуры. и исполнение вернется на клиента. так что не надо путать.
|
|||
20
EasyRider
28.12.09
✎
14:24
|
(19)Тогда надо еще одну функцию на сервере делать,если я правильно все понял
|
|||
21
Антон Чехов
28.12.09
✎
14:24
|
так, обрисую детальнее условия задачи:
есть документ, есть справочник с реквизитом-ссылкой на этот документ. В документе №1 кнопка - при нажатии надо найти все элементы справочника со ссылкой на данный документ и задать вопрос по каждому элементу (пусть таких элементов будет 10) В случае утвердительного ответа - необходимо очистить реквизит-ссылку на данный документ. Задача упрощена, не задавайте вопросы по поводу её глупизны. Как я себе изначально представлял решение задачи: 1) Процедура обработки команды, на клиенте. Передаем управление в серверную функцию 2) Серверная функция, делаем запрос, возвращаем ТЗ или выборку на клиент 3) на клиенте, в процедуре обработки команды, задаем вопросы. 4) по ответам - идем на сервер, чистим реквизит Но запнулся на 2). не дает вернуть ни таблицу, ни выборку. |
|||
22
hhhh
28.12.09
✎
14:28
|
(21) ну опять же строку, где через запятую или точку с запятой перечислены элементы. Чего ты паришься?
|
|||
23
temp1982
28.12.09
✎
14:28
|
а почему нельзя список значений вернуть с сервера?
|
|||
24
vmv
28.12.09
✎
14:28
|
(21) если процедуры объявлены в общем модуле сними флаг "глобальный", я сам еще на 100% не впитал взаимодействия, но это часто было причиной такого рода проблем
|
|||
25
EasyRider
28.12.09
✎
14:29
|
Ну тут 3 функции:
первая - на сервере,которая ищет элементы справочника со ссылкой на документ. вторая - вызывает первую,получает выборку и по мере обхода выборки задает вопрос по удалению.В случае утвердительного ответа => третья - на сервере удаляет элемент справочника |
|||
26
EasyRider
28.12.09
✎
14:30
|
ой,не удаляет,а чистит реквизит
|
|||
27
EasyRider
28.12.09
✎
14:33
|
а...выборку нельзя.Ну тогда в список значений ссылки записать,а его уж передать на клиент.
|
|||
28
Антон Чехов
28.12.09
✎
14:37
|
да. со списком/массивом работает. всем спасибо.
пс. а почему всё-таки ТЗ нельзя? и как выкручиваться если не простой список ссылок необходимо передавать на клиент, а что то посложнее |
|||
29
EasyRider
28.12.09
✎
14:40
|
(28)Потому что у ТЗ Доступность: клиент, сервер, внешнее соединение.
а что посложнее например? |
|||
30
Антон Чехов
28.12.09
✎
14:42
|
(29) навскидку - остатки в разрезах: номенклатура, характеристика. + количество
|
|||
31
EasyRider
28.12.09
✎
14:46
|
(30)А через массив опять же почему не получится?
|
|||
32
Антон Чехов
28.12.09
✎
14:53
|
(31) пихать в строку представления, а строки в массив?
чет изврат какой-то |
|||
33
Антон Чехов
28.12.09
✎
14:54
|
думаю должен быть какой то механизм преобразования обычной ТЗ в ТЗ для тонкого клиента
|
|||
34
temp1982
28.12.09
✎
14:55
|
ну в строку массива ещё можно структура впихнуть...
|
|||
35
EasyRider
28.12.09
✎
14:57
|
(32)Пихать в массив ссылку на номенклатуру,след строкой ссылку на характеристику,след строкой количество.А потом перебирать по 3 строки массива.Думаю так
|
|||
36
vmv
28.12.09
✎
15:02
|
не пойму, что вы обсуждаете.
клиент предназначен принимать результаты запроса, зачем все эти преобразования? выполнил запрос на сервере - результат передал на клиент. Если он не приходит, значит нарушена локализация процедур и/или переменных в контекстах: глобальный, сервер, клиент. |
|||
37
Антон Чехов
28.12.09
✎
15:09
|
(36) пробовал, не получается:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'ret': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}ret по причине: Ошибка отображения типов: Отсутствует отображение для типа 'РезультатЗапроса' обе функции в модуле формы. Первая на клиенте, вызывает вторую (серверную), которая возвращает результат запроса |
|||
38
Mort
28.12.09
✎
15:15
|
Сделай на форме реквизит типа {ТЗ} и юзай с сервера значение в реквизит формы.
|
|||
39
Mort
28.12.09
✎
15:16
|
А по хорошему список значений рулит.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |