Группа: Местный
Сообщений: 264
Спасибо сказали: 69 раз
Рейтинг: 0
Допустим, у меня в общем модуле, который имеет свойства Клиент, сервер, есть функция
Функция ПолучитьОстаток(Парам1, Парам2, ...)Экспорт //какой-то текст кода КонецФункции
Не могу понять, почему в форме документа в процедуре, которая &НаКлиенте при попытке обращения к этой функции выдает ошибку Метод объекта не обнаружен? Ведь в свойствах общего модуля есть флажок Клиент.
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8
Для того, чтобы вызывать из клиентских процедур и функций, должна стоять галка Клиент (управляемой приложение). Но подозреваю, что если вы это сделаете - у вас перестанет работать функция ПолучитьОстаток в нем, если будете вызывать с клиента.
Группа: Местный
Сообщений: 264
Спасибо сказали: 69 раз
Рейтинг: 0
НУ в принципе, и так работает, с клиентской функции на форме лезем в серверную функцию на форме и там уже получаем остаток. Просто интересно, как архитектура работает. Может изза того что установлен флажок Клиент (упр. прил) и Сервер одновременно, а надо только Клиент(...
Группа: Местный
Сообщений: 264
Спасибо сказали: 69 раз
Рейтинг: 0
Цитата(Petre @ 07.09.15, 16:07)
Функция без дерективы считается серверной.
Да, действительно функция получения остатка в общем модуле у меня с директивой &НаСервере. Получается, что на форме с ф-ции &НаКлиенте я могу обратиться к функции &НаСервере, если она здесь же на форме, а если эта функция &НаСервере, но в общем модуле, то уже не могу...
Цитата(Petre @ 07.09.15, 16:15)
Из-за того, что не установлен флажек "вызов сервера".
установлен
короче немного порукожопил я. На кой ляд я вынес функцию в общий модуль Клиент + Сервер, и задал функции &НаСервере, надо было просто в общий модуль Сервер, и никаких директив указывать не надо! Тогда из формы, из клиента она вызывается без ошибок. В типовой конфе в общих модулях никаких директив нету! Придется еще кое что переписать
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9
Запамятовал я, а вы еще немного "помогли")))) В общем, примерно так. Если стоит и клиент, и сервер, то компилируется два экземпляра общего модуля (в соответствии с директивами). При чем с клиентской стороны виден только клиентский модуль, а с серверной - серверный. Если директива не указана - она компилируется в оба экземпляра. И как раз по причине того, что у вас была указана серверная директива (только вы привели модуль без нее, чем и сбили меня)))), она не видна из клиента.
Сообщение отредактировал Petre - 07.09.15, 15:59
Допрацьовую: - "Бухгалтерія для України 2.1"; - "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".
Группа: Местный
Сообщений: 264
Спасибо сказали: 69 раз
Рейтинг: 0
Цитата(Petre @ 07.09.15, 16:46)
Та не. Смысл понимается, когда представить, как это все компилируется. Если стоит и клиент, и сервер, то компилируется два экземпляра общего модуля (в соответствии с директивами). При чем с клиентской стороны виден только клиентский модуль, а с серверной - серверный. И да, "вызов сервера" при этом не работает.
Похоже, в общих модулях директив быть не должно ВООБЩЕ. Во всяком случае в типовых конфигурациях все идет без директив. Т.е. указывать в общих модулях директивы - рукожопство
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(onsamuy @ 07.09.15, 16:57)
Т.е. указывать в общих модулях директивы - рукожопство
Смотря какая цель директив. Если клиент-сервер, то да, судя по БСП их принято разделять в отдельные модули, а если тонкий-вэб то это вполне не рукожопство для клиентского модуля.
Личные бесплатные консультации не даю, для этого есть форум!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!