Здравствуйте, возможно банальный вопрос, но столкнулся впервые...
В релизе 8.3.8.2167 (может и в более свежих также, не проверял) столкнулся с тем, что при попытке компиляции модуля управляемой формы, где присутствует вызов функции или процедуры общего модуля, у которого стоит галка Глобальный выходит ошибка, что такая процедура или функция не найдена.
Т.е. еще раз, есть к примеру общий модуль "Тест", в нем стоит галка "Глобальный" и галки "Сервер" и "Вызов сервера". В этом модуле есть какая-то процедура. Так вот эта процедура как оказалось не видна с модуля формы и лечится только если снять галку "Глобальный" с модуля и обращаться к процудере через точку, т.к. вида Тест.ПроцедураТакаяТо(). Просьба пояснить почему так? Это такая особенность УФ, или баг платформы?
---
Процедура глобального модуля должна иметь тот же контекст, из которого она вызывается.
---
Вызываете в контексте сервера или клиента?
---
В контексте клиента
---
так попробуйте в контексте сервера, модуль ведь серверный
---
Так-то может и сработает, но хотелось-бы знать почему изначально не работает, т.к. причин не работать я не знаю.
---
Глобальный — если флаг установлен, функции и процедуры из этого модуля становятся доступны в глобальном контексте. Т.е. их можно вызвать в любом месте конфигурации, обращаясь без названия общего модуля. Однако добавляется условие — название процедур и функций в этом общем модуле должны быть уникальны в рамках глобального контекста.
Сервер — процедуры и функции данного общего модуля могут быть выполнены на сервере.
Внешнее соединение — программные коды данного общего модуля могут быть выполнены при подключении внешним источником (например, COM).
Клиент (управляемое приложение) — процедуры и функции данного общего модуля могут быть использованы в толстом клиенте в режиме управляемого приложения.
Клиент (обычное приложение) — программные коды данного общего модуля могут быть использованы в толстом клиенте в режиме обычного приложения.
Вызов сервера — флаг, разрешающий на клиенте использовать процедуры и функции из этого общего модуля.
Привилегированный — если установлена Истина, в этом общем модуле будет отключена проверка прав доступа.
Повторное использование — определяет настройки возвращаемых значений, если опция включена, то после первого выполнения система запомнит значение для данных входных параметров и будет возвращать уже готовое значение. Может принимать следующие значения: не используется — отключение, на время вызова — на время выполнения определенной процедуры, на время сеанса — пока пользователь не закрыл сеанс (программу).
---
И к чему это? Как это относится к сути вопроса?
---
общая информация для проверки, Процедура Экспортная и уникальная, для того чтобы быть глобальной?
---
Да, экспортная и уникальная. Да собственно проверить то что я написал дело одной минуты..
---
и ИТС Правила создания общих модулей
---
Процедура глобального модуля должна иметь тот же контекст, из которого она вызывается.
---
Спасибо!
---
Ага, тоже всю голову сломал.
"ВызовСервера" для глобального модуля не дает доступность его методов с клиента...
Если надо, то или модуль делать неглобальным,
или вызывать из обертки серверной типа
&НаКлиенте
процедура НужнаяОбработка()
     НужнаяОбработкаСервер();
КонецПроцедуры
//без директивы - значит "&НаСервере"
Процедура НужнаяОбработкаСервер()
    //Вызов процедуры с сервера
КонецПроцедуры

Ну или делать отдельный модуль клиентский, если можно обойтись без серверного контекста для решения задачки... +
(Очень локально сам пошел по третьему пути, заменив обращения к перечислениям на "ПредопределенноеЗначение...")
---
для 8.3.16.1148 проблема всё ещё актуальна - при вызове серверной функции глобального модуля из менеджера объекта, в случае использования толстого клиента функция выпадает из контекста - становится не видна. При этом всё компиляется, запускается и тп.
Мораль - глобальные модули - плохой феншуй.
---
В ответе (5) сказано, что глобальные функции вызываются без указания модуля. Мне это помогло!