|
Процедура из общего модуля не вызывается из расширения
petr_ivanov, Dmitrii, maxab72, probably, Волшебник, НачинающийВосьмерочн, Доминошник, ads55, Михаил_, Алексей44, Irbis, PR, Мультук, СвинТуз, mikecool, zva, saaken, osa1C, ass1c, Климов Сергей, Rovan, Builder, LuckyStar, asady, НЕА123, Prog_man
| ☑ |
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) Чтобы более подробно ответить на Ваши вопросы, нужен конкретный пример кода.
|
|
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший