Имя: Пароль:
1C
 
Процедура из общего модуля не вызывается из расширения
0 petr_ivanov
 
09.10.24
16:36
Есть общий модуль, галка "на клиенте" снята. В нем есть Процедура с директивой &НаКлиенте, которая вызывает окно сохранения файла.

Вызываю ее из внешней обработки, из модуля формы- работает. А если вызываю из модуля формы в расширении - не работает,ошибка "Метод объекта не обнаружен".

Пробовал вызывать в расширении и из &НаКлиенте, и из &НаСервере - одинаковая ошибка.

При этом процедуры из этого общего модуля с директивой &НаСервере - вызываются.

Что я делаю не так?
1 Волшебник
 
09.10.24
17:25
>> общий модуль, галка "на клиенте" снята. В нем есть Процедура с директивой &НаКлиенте

Вы чё там курите?
2 mikecool
 
09.10.24
17:40
(1) возможно баг платформы...
3 PR
 
09.10.24
17:45
(2) Баг головного мозга ТС это, а не платформы
Сто процентов где-то что-то не то глянул, а теперь нам мозг лечит задачками пойди туда, не знаю куда, сделай то, не знаю что
4 Dmitrii
 
09.10.24
17:47
(0) Вы что-то напутали с тем откуда вызываете (с клиента или с сервера) и где реально находится вызываемая процедура (на клиенте или на сервере).

Начнём с общего модуля.
Вы пишите "галка "на клиенте" снята". Это значит, что все процедуры и функции этого модуля (включая те, что с ключевым словом "Экспорт") выполняются только в контексте сервера. На клиенте их не существует. Директивы &НаКлиенте/&НаСервере перед процедурами и функциями в этом модуле игнорируются. Считай, что у всех стоит директива по умолчанию. Директивой по умолчанию является &НаСервере.
Но если у модуля стоит галка "Вызов сервера", то экспортные процедуры и функции этого модуля можно вызвать не только с сервера, но и с клиента. Но даже вызванные с клиента выполнятся они будут всё равно только на сервере.

Теперь про модули форм.

>> Пробовал вызывать в расширении и из &НаКлиенте, и из &НаСервере - одинаковая ошибка.

Это неправда.
Если у твоего общего модуля стоит "Вызов сервера", то вызов должен быть доступен и с клиента и с сервера.
Если галки "Вызов сервера" у твоего модуля нет, то вызов возможен только с сервера.
Либо ты не о тех директивах говоришь, либо вызываешь методы, у которых не установлено ключевое слово "Экспорт", либо что-то путаешь.

>> При этом процедуры из этого общего модуля с директивой &НаСервере - вызываются.

Это противоречит предыдущему утверждению, где сказано: "Пробовал вызывать в расширении и из &НаКлиенте, и из &НаСервере - одинаковая ошибка".

Так "ошибка" или "вызываются".

Рассказывай подробнее - кто кого откуда вызывает.
Показывай свой код.
5 petr_ivanov
 
09.10.24
18:19
(4) большое спасибо за развернутый ответ.

я правильно понимаю, что если в общем модуле у меня две процедуры, одна из которых чисто серверная (делает запрос к данным), другая чисто клиентская (показывает диалоговое окно выбора файла), то галки должны стоять и "на клиенте",и "на сервере" (включая "вызов сервера")?

И в этом случае надо у каждой явно указать директиву, где она будет выполняться?

Как только я ставлю галку "на клиенте" у меня отваливается вызов функции из расширения, которая на сервере.
6 Dmitrii
 
09.10.24
18:34
(5) Сделайте два модуля.
Один серверный, с флагом "Вызов сервера". Там разместите те процедуры и функции, которые делают запросы к данным.
Второй клиентский. Там работа с диалогами.
7 Dmitrii
 
09.10.24
18:35
+ к (5) Чтобы более подробно ответить на Ваши вопросы, нужен конкретный пример кода.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший