Не видит в расширении процедуру общего модуля

1. user1991633 04.12.24 17:53 Сейчас в теме
У общего модуля не стоит вызов сервера. В Расширении его не видит. Как обойти эту ситуацию?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user-z99999 72 04.12.24 18:08 Сейчас в теме
(1) Попробуй написать код без контекстной подсказки.
3. -AI- 04.12.24 22:08 Сейчас в теме
(1)
У общего модуля не стоит вызов сервера.

сделай в расширении общий серверный модуль с вызовом сервера,
и от туда вызывай уже серверный модуль

а из своего клиентского коды вызывай этот промежуточный модуль.

например:
сначала клиентский код:
ПромежуточныйМодуль.ВызватьДеда(Что, так, разволновался);

общий серверный ПромежуточныйМодуль в расширении, с вызовом сервера:
Функция ПромежуточныйМодуль.ВызватьДеда(Торговля, плохо, идет) 
   Возврат МодульВОсновнойКонфигурации.ДедЩукарьВыходи(Торговля, не плохо, идет);
КонецФункции

ну и серверный МодульВОсновнойКонфигурации без вызова сервера приводить не буду...

вроде и так должно быть понятно...
4. VmvLer 05.12.24 13:40 Сейчас в теме
если метод вызывается на клиенте, то в точке вызова необходимо делать серверные методы-обертки. в последние и помещаете вызов метода из модуля с галкой вызов сервера. далее эту обертку вызываете на клиенте.

год назад так усилилась безопасность в платформе.
5. user2116971 05.12.24 13:45 Сейчас в теме
(4)
то в точке вызова необходимо делать серверные методы-обертки. в последние и помещаете вызов метода из модуля с галкой вызов сервера. далее эту обертку вызываете на клиенте.

Ты сейчас реально на голубом глазу говоришь о том, что из серверного контекста модуля формы я напрямую не достучусь до серверного же общего модуля?
И реально говоришь, что я напрямую с клиента не достучусь до общего модуля с ВызовСервера?
6. VmvLer 10.12.24 10:46 Сейчас в теме
(5) "если метод вызывается на клиенте", что не ясно в этой фразе?

"И реально говоришь, что я напрямую с клиента не достучусь до общего модуля с ВызовСервера?"
да, именно это я и имел ввиду. на древних платформах пракатит, на новых нет.
7. comptr 35 10.12.24 10:54 Сейчас в теме
(6) а можно ссылку на источник?
ВызовСервера как раз сделан для того, чтобы вызывать экспортные серверные методы с клиента, с чего это будет меняться?
Другое дело, что нужно хорошо подумать, какие методы размещать в таком общем модуле, о чём явно написано в стандарте #679, но это - ответственность разработчика.
orakool; user2107191; +2 Ответить
8. VmvLer 10.12.24 11:30 Сейчас в теме
(7) https://forum.infostart.ru/forum9/topic306850/#message3027988

внутри ссылки на источники, размышляйте. эту тему давно уже обсудили.
9. user2107191 10.12.24 11:44 Сейчас в теме
(8) Нет там источников с указанием на то, что с клиентского контекста нельзя обратиться к модулю с флагом ВызовСервера (а можно только из серверного).
Давай дальше аргументируй.

// Давать в качестве аргумента ссылки на свои же кривые комментарии - это достойный уровень!
comptr; user1863362; orakool; +3 Ответить
12. VmvLer 10.12.24 12:17 Сейчас в теме
(10) На момент версии 8.3.21 не работало. Сделал обертки и с тех пор не менял.
(9) Я озвучил свой опыт и способ решения текущих неполадок. Еще вопросы?
14. user2107191 10.12.24 12:22 Сейчас в теме
(12)
Еще вопросы?
К тебе-то?? Ваще нет!
Есть предложение к тебе - не выдавать здешним новопасситам своих кривых теорий за истину.

Я озвучил свой опыт
в точке вызова необходимо делать серверные методы-обертки.
Где здесь про опыт? Это прямо таки категоричное утверждение!
17. VmvLer 10.12.24 12:26 Сейчас в теме
(14) В расширении да - так и нужно. Мои слова уже правильно перевели.
Предложения делайте в других местах. Ошибаться, быть неточным - обычное дело для человека, если ты не "Гений 1С")
10. Sashares 35 10.12.24 11:44 Сейчас в теме
(8) Что-то вы путаете.
Вызов с клиента общих модулей с флагом вызов сервера в расширении работает.
8.3.25.1445.

В новых платформах появилась проблема с серверными процедурами формы, что имея форму, их в расширении нельзя было вызвать с клиента. Вида Форма.МояСервернаяПроцедура().
Надо в расширении добавлять в форму процедуру клиентскую и из нее уже вызывать серверную типовую.
Прикрепленные файлы:
user2107191; +1 Ответить
15. user1863362 10.12.24 12:23 Сейчас в теме
(10)
появилась проблема
Это не проблема, а устранение дырыщи, когда все серверные методы формы были экспортными. Расширение тут ну вообще ни при чем.

Один дебил пишет код типа
&НаКлиенте
Процедура УволитьСотрудника(Сотрудник)

    Если ФазыЛуныПозволяютНаКлиенте() Тогда
        УволитьСотрудникаНахренНаСервере(Сотрудник);
    КонецЕсли

КонецПроцедуры

А второй дебил добавляет
&НаКлиенте
Процедура Огого(Команда)

    Форма = ПолучитьФорму("Форма");
    Форма.УволитьСотрудникаНахренНаСервере(ЭтотОбъект.Сотрудник);

КонецПроцедуры
16. Sashares 35 10.12.24 12:25 Сейчас в теме
(15) Да там и экспортные серверные не работали в расширении. Видимо слишком сильно дыру заделали=)
18. user1863362 10.12.24 12:30 Сейчас в теме
(16)
Видимо
FUI:
Прикрепленные файлы:
comptr; kuzev; Sashares; user2107191; +4 Ответить
21. Sashares 35 10.12.24 12:58 Сейчас в теме
(18) Ну запретить стандартом, и не работает в платформе это немного разное все же =)
19. user2107191 10.12.24 12:37 Сейчас в теме
(16) А зачем вообще экспортные в форме? У меня только обработчики асинхронных оповещений экспортные, и всё...
20. Sashares 35 10.12.24 12:57 Сейчас в теме
(19) Например, для универсальности.
Форма куда-нибудь передается, в общий модуль, и в общем модуле вызываются ее серверные процедуры при каком либо условии.
Если для нескольких форм одинаковая процедура на форме, которую будут вызывать извне.

У меня такого нет, но не исключаю, что у кого-то есть.
23. spacecraft 10.12.24 13:05 Сейчас в теме
(19) БСП Подключаемые команды так работают.
24. user2107191 10.12.24 13:13 Сейчас в теме
(23) Открыл в ЕРП Заказ клиента.
Абсолютно все экспортные методы - клиентские, обработчики асинхронных оповещений (в том числе и ПодключаемыеКоманды от БСП).
Серверных нет.
25. spacecraft 10.12.24 13:51 Сейчас в теме
(24) к примеру, Справочник Контрагенты. Форма элемента.
И там большой перечень форм, где используется экспортный серверный метод.

PS. Поиск по "Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт". Найдено 1064 модуля формы...
Прикрепленные файлы:
26. user2107191 10.12.24 14:30 Сейчас в теме
(25) Соглашусь. Это значит я удачно так попал с Заказом клиента.
Пойду в лотерею поиграю, что ли...
27. SlavaKron 10.12.24 14:33 Сейчас в теме
(25) Скоро это не будет работать.
Поясню: с точки зрения 1С экспортные серверные методы формы недопустимы.
VyacheslavShilov; user1863362; +2 Ответить
28. spacecraft 10.12.24 15:02 Сейчас в теме
(27) не знаю на счет "скоро", но в основной конфигурации это работает. Не работает, если серверный экспортный метод формы в расширении.
32. comptr 35 11.12.24 11:03 Сейчас в теме
(19) и даже от них, при сильном желании, можно отказаться, если переписать всё на Асинх.
11. spacecraft 10.12.24 11:57 Сейчас в теме
(8) "проблема" ровно наоборот. Стало невозможно извне с клиента вызвать серверный метод модуля формы в расширении.
13. VmvLer 10.12.24 12:18 Сейчас в теме
(11) вот в расширении. ах да - я крутил эти методы в расширении, а не внешках или основной конфигурации.
30. comptr 35 11.12.24 10:59 Сейчас в теме
(8) Почитал, но так и не нашел, почему и как платформа запрещает обращаться с клиента к серверным методам общего модуля с галочкой "Вызов сервера" ? Утверждение в (6) просто ложно. Ни "древняя", ни самая свежая платформа такое не запретит, потому что это ровно предназначение галочки "Вызов сервера".
31. user2107191 11.12.24 11:02 Сейчас в теме
(30) Именно так. Но кто мы такие, чтобы переучивать чужих тараканов?
33. VmvLer 11.12.24 11:17 Сейчас в теме
(30) объекты основной конфигурации, формы, модули, как правило никто не "пилит".
ниже уточнили, что утверждение верно в контексте расширений, в которых и ведут дополнительные разработки.
35. user2107191 11.12.24 11:24 Сейчас в теме
(33) Ну в (10) же все продемонстрировано - все работает. Из модуля формы РАСШИРЕНИЯ доступны общие модули с ВызовСервера.
36. VmvLer 11.12.24 16:49 Сейчас в теме
(35)
Ок, возможно я неправильно озвучил суть неполадки, да и речь вовсе не о галке «вызов сервера».

Суть в том, что в расширении из клиентского общего модуля можно вызывать экспортный метод модуля формы только если это форма добавленного в расширение объекта (обработка, справочник, список - не важно).

Если объект добавлен в расширение, то можно сократить код и вызывать серверный метод формы без клиентской обертки.

Далее, если это расширяемый объект, то невозможно вызвать серверный метод формы этого объекта из общего клиентского модуля.

В конце 2023 пришлось перепилить расширения с такими обертками. Подобный код раньше встречался часто, думаю и сейчас есть в общих методах пересчета табличных частей, отборах и т.п.
Он работает без ошибок в основной конфигурации и в добавленных в расширения объектах, но в расширяемых объектах требует контекстные «портянки».

Я подготовил скрины и расширение чтобы был виден результат.

Вопрос: Почему одна и та же логика полноценно работает в расширении только с новыми объектами, а с расширенными нет?
Прикрепленные файлы:
22. user1863362 10.12.24 13:04 Сейчас в теме
(20)
Например, для универсальности
А потом у тебя где-нибудь застревает ссылка на экземляр формы - форма закрыта, но не уничтожена. Утечка памяти, сбои в логике обработчиков ПриСозданииНаСервере, ПриЧтенииНаСервере, ПриОткрытии, ПриПовторномОткрытии, сопли разработчиков, стоны на форуме. У особо гениев еще и и претензии к вендору.

Зато универсально и ленивому разработчику жопу поднимать не пришлось, да
29. user1863362 10.12.24 17:28 Сейчас в теме
(25)
Найдено 1064 модуля
Судя по всему - поддержка совместимости. В БСП уже давно как:
		Если ПараметрыВыполнения.ВызовСервераЧерезОбработкуОповещения Тогда
			ОписаниеОповещения = Новый ОписаниеОповещения("Подключаемый_ПродолжитьВыполнениеКомандыНаСервере", ПараметрыВыполнения.Форма);
			ВыполнитьОбработкуОповещения(ОписаниеОповещения, СерверныйКонтекст);
			Результат = СерверныйКонтекст.Результат;
		Иначе
			ПараметрыВыполнения.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);
		КонецЕсли;

Выпилят.
34. kuzev 48 11.12.24 11:23 Сейчас в теме
37. VmvLer 11.12.24 16:50 Сейчас в теме
результат
Прикрепленные файлы:
38. VmvLer 11.12.24 16:50 Сейчас в теме
расширение
Прикрепленные файлы:
РТест1.cfe
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот