В самописной конфе в клиентском неглобальном модуле была процедура, которая успешно вызывалась на клиенте из разных мест. Понадобилось использовать её в HTTP-сервисе, для чего стало нужно, чтобы она была доступна и на сервере тоже.
Перенёс её в глобальный модуль, в его свойствах флажки "Клиент (управляемое приложение)", "Сервер" и "Вызов сервера" стоят, ключевое слово "Экспорт" у процедуры есть.
Ставлю перед ней директивы компиляции "&НаКлиентеНаСервере" или "&НаКлиентеНаСервереБезКонтекста" - процедуру не видно ни с клиента, ни с сервера. Ладно, мы не гордые - сделаем процедуру чисто "&НаСервере". В результате с сервера её видно, а с клиента нет, хотя флажок "Вызов сервера" стоит. Сделал глобальную процедуру-обёртку "&НаКлиенте". С клиента обёртка видна, но сама она серверную процедуру из того же модуля не видит. Чистил кеш - не помогло.
Уберите директивы совсем. Так процедура будет видна и с клиента и с сервера... но только извне
Обратиться к другой процедуре того же модуля можно только в виде клиент-клиент или сервер-сервер... по другому никак, только сделав вызов в ещё одном общем модуле
По контексту топика получается, что нужный общий модуль должен иметь второй вид, а именно :
2. Серверный для вызова с клиента (это тип модуля)
ОбщегоНазначенияВызовСервера (пример наименования)
+ Вызов сервера
+ Сервер
Директивы компиляции внутри модуля не потребуются.
з.ы. Там в тексте по ссылке есть ещё кусочек, который нужно выделить - вот я ниже его скопипастил
---
В то же время, как только возникает необходимость ветвить код в клиент-серверных общих модулях на серверный и клиентский, то не следует использовать для этого инструкции препроцессора. Вместо этого, функциональность, различную для клиента и для сервера, рекомендуется реализовывать по общим правилам в модулях соответствующего типа – см. пп. 2.1 и 2.3. Такое явное разделение клиентской и серверной бизнес-логики продиктовано соображениями повышения модульности прикладного решения, упрощения контроля со стороны разработчика над клиент-серверным взаимодействием и снижением риска ошибок из-за принципиальных отличий требований к разработке клиентского и серверного кода (необходимость минимизации кода, выполняемого на клиенте, разной доступностью объектов и типов платформы и др.). При этом нужно иметь в виду неизбежное увеличение числа общих модулей в конфигурации.
---
(5)
1. По контексту топика явно понятно, что модуль должен быть доступен и на клиенте, и на сервере. Т.е. нужны галки "Клиент" и "Сервер".
2. В вашеи варианте "Вызов сервера" и "Сервер" - тоже будет работать, но приэтом будут лишние серверные вызовы. Зачем код выполнять на сервере, если он может быть выполнен на клиенте?
3. Вспоминаю анекдот про Вовочку: "А вы, дяденька, если не знаете, то не подсказывайте"
(6) Именно. Если раньше код спокойно работал на клиенте, и не требуется его изменять - значит там нет явных серверных методов работы с серверными объектами или данными БД, и данный код может работать именно что в двух контекстах - клиентском и серверном. Именно работать, а не "всегда вызываться сервер с клиента".
(8) Про "глобальный модуль" - это скорее всего опечатка автор вопроса. Вероятно он имел ввиду неглобальный общий модуль.
Те, кто сильно долго программировал в 7.7, до конца жизни будут "глобальный" вместо "общий"
Уберите директивы совсем. Так процедура будет видна и с клиента и с сервера... но только извне
Обратиться к другой процедуре того же модуля можно только в виде клиент-клиент или сервер-сервер... по другому никак, только сделав вызов в ещё одном общем модуле
(1) А зачем глобальный модуль?
Для модуля, Клиент и ВызовСервера - противоречащие галки. По вашей задаче, видимо, нужно оставить Сервер и ВызовСервера.