сделай в расширении общий серверный модуль с вызовом сервера,
и от туда вызывай уже серверный модуль
а из своего клиентского коды вызывай этот промежуточный модуль.
например:
сначала клиентский код:
ПромежуточныйМодуль.ВызватьДеда(Что, так, разволновался);
общий серверный ПромежуточныйМодуль в расширении, с вызовом сервера:
Функция ПромежуточныйМодуль.ВызватьДеда(Торговля, плохо, идет)
Возврат МодульВОсновнойКонфигурации.ДедЩукарьВыходи(Торговля, не плохо, идет);
КонецФункции
ну и серверный МодульВОсновнойКонфигурации без вызова сервера приводить не буду...
если метод вызывается на клиенте, то в точке вызова необходимо делать серверные методы-обертки. в последние и помещаете вызов метода из модуля с галкой вызов сервера. далее эту обертку вызываете на клиенте.
то в точке вызова необходимо делать серверные методы-обертки. в последние и помещаете вызов метода из модуля с галкой вызов сервера. далее эту обертку вызываете на клиенте.
Ты сейчас реально на голубом глазу говоришь о том, что из серверного контекста модуля формы я напрямую не достучусь до серверного же общего модуля?
И реально говоришь, что я напрямую с клиента не достучусь до общего модуля с ВызовСервера?
(5) "если метод вызывается на клиенте", что не ясно в этой фразе?
"И реально говоришь, что я напрямую с клиента не достучусь до общего модуля с ВызовСервера?"
да, именно это я и имел ввиду. на древних платформах пракатит, на новых нет.
(6) а можно ссылку на источник?
ВызовСервера как раз сделан для того, чтобы вызывать экспортные серверные методы с клиента, с чего это будет меняться?
Другое дело, что нужно хорошо подумать, какие методы размещать в таком общем модуле, о чём явно написано в стандарте #679, но это - ответственность разработчика.
(8) Нет там источников с указанием на то, что с клиентского контекста нельзя обратиться к модулю с флагом ВызовСервера (а можно только из серверного).
Давай дальше аргументируй.
// Давать в качестве аргумента ссылки на свои же кривые комментарии - это достойный уровень!
(10) На момент версии 8.3.21 не работало. Сделал обертки и с тех пор не менял.
(9) Я озвучил свой опыт и способ решения текущих неполадок. Еще вопросы?
(14) В расширении да - так и нужно. Мои слова уже правильно перевели.
Предложения делайте в других местах. Ошибаться, быть неточным - обычное дело для человека, если ты не "Гений 1С")
(8) Что-то вы путаете.
Вызов с клиента общих модулей с флагом вызов сервера в расширении работает.
8.3.25.1445.
В новых платформах появилась проблема с серверными процедурами формы, что имея форму, их в расширении нельзя было вызвать с клиента. Вида Форма.МояСервернаяПроцедура().
Надо в расширении добавлять в форму процедуру клиентскую и из нее уже вызывать серверную типовую.
Это не проблема, а устранение дырыщи, когда все серверные методы формы были экспортными. Расширение тут ну вообще ни при чем.
Один дебил пишет код типа
&НаКлиенте
Процедура УволитьСотрудника(Сотрудник)
Если ФазыЛуныПозволяютНаКлиенте() Тогда
УволитьСотрудникаНахренНаСервере(Сотрудник);
КонецЕсли
КонецПроцедуры
А второй дебил добавляет
&НаКлиенте
Процедура Огого(Команда)
Форма = ПолучитьФорму("Форма");
Форма.УволитьСотрудникаНахренНаСервере(ЭтотОбъект.Сотрудник);
КонецПроцедуры
(19) Например, для универсальности.
Форма куда-нибудь передается, в общий модуль, и в общем модуле вызываются ее серверные процедуры при каком либо условии.
Если для нескольких форм одинаковая процедура на форме, которую будут вызывать извне.
У меня такого нет, но не исключаю, что у кого-то есть.
(23) Открыл в ЕРП Заказ клиента.
Абсолютно все экспортные методы - клиентские, обработчики асинхронных оповещений (в том числе и ПодключаемыеКоманды от БСП).
Серверных нет.
(8) Почитал, но так и не нашел, почему и как платформа запрещает обращаться с клиента к серверным методам общего модуля с галочкой "Вызов сервера" ? Утверждение в (6) просто ложно. Ни "древняя", ни самая свежая платформа такое не запретит, потому что это ровно предназначение галочки "Вызов сервера".
(30) объекты основной конфигурации, формы, модули, как правило никто не "пилит".
ниже уточнили, что утверждение верно в контексте расширений, в которых и ведут дополнительные разработки.
(35)
Ок, возможно я неправильно озвучил суть неполадки, да и речь вовсе не о галке «вызов сервера».
Суть в том, что в расширении из клиентского общего модуля можно вызывать экспортный метод модуля формы только если это форма добавленного в расширение объекта (обработка, справочник, список - не важно).
Если объект добавлен в расширение, то можно сократить код и вызывать серверный метод формы без клиентской обертки.
Далее, если это расширяемый объект, то невозможно вызвать серверный метод формы этого объекта из общего клиентского модуля.
В конце 2023 пришлось перепилить расширения с такими обертками. Подобный код раньше встречался часто, думаю и сейчас есть в общих методах пересчета табличных частей, отборах и т.п.
Он работает без ошибок в основной конфигурации и в добавленных в расширения объектах, но в расширяемых объектах требует контекстные «портянки».
Я подготовил скрины и расширение чтобы был виден результат.
Вопрос: Почему одна и та же логика полноценно работает в расширении только с новыми объектами, а с расширенными нет?
А потом у тебя где-нибудь застревает ссылка на экземляр формы - форма закрыта, но не уничтожена. Утечка памяти, сбои в логике обработчиков ПриСозданииНаСервере, ПриЧтенииНаСервере, ПриОткрытии, ПриПовторномОткрытии, сопли разработчиков, стоны на форуме. У особо гениев еще и и претензии к вендору.
Зато универсально и ленивому разработчику жопу поднимать не пришлось, да
Судя по всему - поддержка совместимости. В БСП уже давно как:
Если ПараметрыВыполнения.ВызовСервераЧерезОбработкуОповещения Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("Подключаемый_ПродолжитьВыполнениеКомандыНаСервере", ПараметрыВыполнения.Форма);
ВыполнитьОбработкуОповещения(ОписаниеОповещения, СерверныйКонтекст);
Результат = СерверныйКонтекст.Результат;
Иначе
ПараметрыВыполнения.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);
КонецЕсли;