Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вызов функции общего модуля на клиенте
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
onsamuy
Допустим, у меня в общем модуле, который имеет свойства Клиент, сервер, есть функция

Функция ПолучитьОстаток(Парам1, Парам2, ...)Экспорт
//какой-то текст кода
КонецФункции


Не могу понять, почему в форме документа в процедуре, которая &НаКлиенте при попытке обращения к этой функции выдает ошибку Метод объекта не обнаружен? Ведь в свойствах общего модуля есть флажок Клиент.

Вот так не работает
&НаКлиенте
Функция ПересчитатьКолво()
   // .......
   ПараметрыОстатка = Дополнительный.ПолучитьОстаток(Парам1, Парам2, ...)
   // .......
КонецФункции


Работает если только сделать так

&НаКлиенте
Функция ПересчитатьКолво()
   // .......
   ПараметрыОстатка = ПолучитьОстатокНаСервере(Парам1, Парам2, ...);
   // .......
КонецФункции

&НаСервере
Функция ПолучитьОстатокНаСервере(Парам1, Парам2, ...);
   // .......
   Возврат Дополнительный.ПолучитьОстаток(Парам1, Парам2, ...)
   // .......
КонецФункции
Vofka
Для того, чтобы вызывать из клиентских процедур и функций, должна стоять галка Клиент (управляемой приложение). Но подозреваю, что если вы это сделаете - у вас перестанет работать функция ПолучитьОстаток в нем, если будете вызывать с клиента.
Petre
Функция без дерективы считается серверной.
onsamuy
НУ в принципе, и так работает, с клиентской функции на форме лезем в серверную функцию на форме и там уже получаем остаток. Просто интересно, как архитектура работает. Может изза того что установлен флажок Клиент (упр. прил) и Сервер одновременно, а надо только Клиент(...
Petre
Из-за того, что не установлен флажек "вызов сервера".
onsamuy
Цитата(Petre @ 07.09.15, 16:07) необходимо зарегистрироваться для просмотра ссылки
Функция без дерективы считается серверной.

Да, действительно функция получения остатка в общем модуле у меня с директивой &НаСервере. Получается, что на форме с ф-ции &НаКлиенте я могу обратиться к функции &НаСервере, если она здесь же на форме, а если эта функция &НаСервере, но в общем модуле, то уже не могу...

Цитата(Petre @ 07.09.15, 16:15) необходимо зарегистрироваться для просмотра ссылки
Из-за того, что не установлен флажек "вызов сервера".

установлен

короче немного порукожопил я. На кой ляд я вынес функцию в общий модуль Клиент + Сервер, и задал функции &НаСервере, надо было просто в общий модуль Сервер, и никаких директив указывать не надо! Тогда из формы, из клиента она вызывается без ошибок. В типовой конфе в общих модулях никаких директив нету! Придется еще кое что переписать smile.gif
Petre
Запамятовал я, а вы еще немного "помогли"))))
В общем, примерно так.
Если стоит и клиент, и сервер, то компилируется два экземпляра общего модуля (в соответствии с директивами). При чем с клиентской стороны виден только клиентский модуль, а с серверной - серверный.
Если директива не указана - она компилируется в оба экземпляра. И как раз по причине того, что у вас была указана серверная директива (только вы привели модуль без нее, чем и сбили меня)))), она не видна из клиента.
onsamuy
Цитата(Petre @ 07.09.15, 16:46) необходимо зарегистрироваться для просмотра ссылки
Та не. Смысл понимается, когда представить, как это все компилируется.
Если стоит и клиент, и сервер, то компилируется два экземпляра общего модуля (в соответствии с директивами). При чем с клиентской стороны виден только клиентский модуль, а с серверной - серверный.
И да, "вызов сервера" при этом не работает.


Похоже, в общих модулях директив быть не должно ВООБЩЕ. Во всяком случае в типовых конфигурациях все идет без директив. Т.е. указывать в общих модулях директивы - рукожопство
Petre
Цитата(onsamuy @ 07.09.15, 16:57) необходимо зарегистрироваться для просмотра ссылки
Т.е. указывать в общих модулях директивы - рукожопство

Не верно.
Предыдущее мое сообщение я отредактировал.
logist
Цитата(onsamuy @ 07.09.15, 16:57) необходимо зарегистрироваться для просмотра ссылки
Т.е. указывать в общих модулях директивы - рукожопство

Смотря какая цель директив. Если клиент-сервер, то да, судя по БСП их принято разделять в отдельные модули, а если тонкий-вэб то это вполне не рукожопство для клиентского модуля.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.