Вызов серверной процедуры глобального модуля из клиентской процедуры этого же ГОМ

1. l4h 04.01.21 15:08 Сейчас в теме
Столкнулся с непонятным для меня поведением и нигде в документации не могу найти объяснения такому поведению.
Есть глобальный общий модуль с парой процедур: одна выполняется на клиенте, вторая должна вызываться из первой и выполняется на сервере. Загвоздка в том, что из процедуры на клиенте я не вижу серверной процедуры, хотя галка "Вызов сервера" у модуля стоит. Может кто знает где найти инфу об этом в документации или кто-то объяснит такое поведение, тонкости работы с глобальными модулями?
По теме из базы знаний
Найденные решения
10. spacecraft 04.01.21 17:15 Сейчас в теме
(7) вот для примера: https://infostart.ru/1c/articles/86838/

Существует еще одна особенность. В одном общем модуле, имеющем несколько мест компиляции («Сервер, клиент») нельзя вызывать из клиентской процедуры серверную того же модуля, даже если поставить галку «вызов сервера». Свойство «вызов сервера» имеет смысл при наличии только одного свойства общего модуля «компиляции на Сервере».
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 04.01.21 16:37 Сейчас в теме
(1) тут дело не в свойстве "глобальный", а в том, что он и клиентский и серверный.
Свойство "Вызов сервера" будет работать только, если данный Общий модуль скомпилирован только на Сервере.
4. l4h 04.01.21 16:52 Сейчас в теме
(2)
будет работать только,

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

Спасибо!

Кстати, если запускать толстый клиент, то все работает. Хотя и ругается, что процедура не найдена.
5. spacecraft 04.01.21 16:56 Сейчас в теме
(4) напрямую ссылку на документацию сейчас не дам. Знания накапливаются без привязки к первоисточнику. Ищите особенности работы клиент-серверных общих модулей.
Кстати, если запускать толстый клиент, то все работает. Хотя и ругается, что процедура не найдена.

Толстый клиент в файловом варианте все выполняет на стороне клиента, от того и работает.
7. l4h 04.01.21 17:01 Сейчас в теме
(5)знать бы где искать) Искал в справке, искал с СП, но ничего не нашел. Недавно мучался с ОписаниемОповещения при вызове ОткрытьФорму(), там ОО является одним из параметров и во всплывающей подсказке ссылка ведет в справку на ОписаниеОповещения, а параметр называется ОписаниеОповещенияОЗакрытии(только минут через 40 обратил на это внимание) и дооооолго я искал описание сигнатуры вызываемого метода(2 параметра). Очень все неоднозначно
10. spacecraft 04.01.21 17:15 Сейчас в теме
(7) вот для примера: https://infostart.ru/1c/articles/86838/

Существует еще одна особенность. В одном общем модуле, имеющем несколько мест компиляции («Сервер, клиент») нельзя вызывать из клиентской процедуры серверную того же модуля, даже если поставить галку «вызов сервера». Свойство «вызов сервера» имеет смысл при наличии только одного свойства общего модуля «компиляции на Сервере».
11. Aleksandr_prof 197 04.07.22 13:56 Сейчас в теме
(10) Ок. Факт остаётся фактом. Но почему имеет смысл только при наличии одного свойства "компиляции на сервере"? Будет ошибка? Или работать не будет? Не могу до конца понять, кто или что запрещает установить все галки?
12. spacecraft 04.07.22 14:16 Сейчас в теме
(11) все дело в компиляции контекстов.
Предположим имеем флаги:
- Сервер
- Вызов сервера
- Клиент (для примера не важен какой именно клиент)

При компиляции общего модуля (если он не глобальный, то компиляция происходит при первом к нему обращении) будут созданы два контекста: Серверный и Клиентский.
Предположим, что общий модуль называется ОбщМодуль и в нем есть процедура Тест.
Соответственно метод Тест будет добавлен как в серверный, так и в клиентский контексты.
Вызов сервера использоваться не будет из клиентского контекста, так как общий модуль есть в клиентском контексте. И обращение ОбщМодуль.Тест() будет вызван метод клиентского контекста.

Теперь мы обрамляем этот метод инструкцией препроцессора #Если Сервер Тогда
В таком случае при компиляции этого модуля метод Тест будет только в серверном контексте. И ожидается, что с клиентского контекста отработает Вызов сервера и вызовется метод северного контекста.
НО...
сам же модуль существует в клиентском контексте. Соответственно будет обращение к клиентскому модулю и попытка вызвать метод клиентского контекста, а его там нет. Будет вызвано исключение.

Это можно представить как два разных общих модуля, но с одинаковым именем. Один северный, другой клиентский.
Да, два разных модуля с одинаковым именем создать нельзя, но для модуля с флагами Сервер и Клиент именно это и происходит, но под капотом.
Aleksandr_prof; +1 Ответить
13. FatPanzer 04.07.22 15:36 Сейчас в теме
(12) Я бы еще добавил, что серверный модуль компилируется в оперативной памяти сервера 1С (службы rphost), а клиентский модуль компилируется в оперативной памяти клиентского компьютера (включая терминальные сеансы RDP). А клиент-серверный модуль компилируется и там и там.

То есть клиент-серверный модуль по сути занимает в два раза больше совокупной оперативной памяти КИС, чем отдельные серверные и клиентские модули. Пустячок, но все же.
Aleksandr_prof; +1 Ответить
14. Aleksandr_prof 197 05.07.22 10:04 Сейчас в теме
(12) Понятно и доступно. Благодарю за разъяснения)
3. AnryMc 849 04.01.21 16:40 Сейчас в теме
"Галки":
- клиент
- сервер
- вызов сервера

без глобального

+
&НаСервере
&НаКлиенте
6. l4h 04.01.21 16:57 Сейчас в теме
(3) Без глобального никак, глобальность требуется чтобы повестить ОбработчикОжидания. Суть задачи в целом такая: создается документ "ЗаказКлиента" и определенным пользователям должно прилететь оповещение, чтобы они дальше этот заказ обработали. Т.к. 1с не дает возможности напрямую черкануть конкретным пользователям или группе(или я не нашел такой возможности кроме сервера взаимодействия) решил это сделать через обработчик ожидания. в целом все работает сабжевая проблема решается легко - созданием доп ОМ, но из интереса и ради получения более глубокого понимания задал вопрос.
8. AnryMc 849 04.01.21 17:01 Сейчас в теме
9. l4h 04.01.21 17:04 Сейчас в теме
(8)Спасибо) я примерно то же самое уже наваял))
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот