|
Почему с клиентской функции не вызывается серверная? | ☑ | ||
---|---|---|---|---|
0
D_Pavel
30.03.12
✎
07:45
|
&НаКлиенте
Функция Команда1() Экспорт Перем стрИмя, стрАдрес; стрАдрес = ""; Если НЕ ПоместитьФайл(стрАдрес, "C:\Temp\tmp.epf", , Ложь) Тогда Возврат (Неопределено); КонецЕсли; стрИмя = ПодключитьВнешнююОбработку(стрАдрес); КонецФункции &НаСервере Функция ПодключитьВнешнююОбработку(Знач стрАдрес) Возврат ВнешниеОбработки.Подключить(стрАдрес); КонецФункции Выдается ошибка: {ОбщийМодуль.УниверсальныеМеханизмы.Модуль(790,11)}: Процедура или функция с указанным именем не определена (ПодключитьВнешнююОбработку) стрИмя = <<?>>ПодключитьВнешнююОбработку(стрАдрес); |
|||
1
Omskdizel
30.03.12
✎
07:50
|
Попробуй ее выше клиентской процедуры воткнуть.
|
|||
2
Omskdizel
30.03.12
✎
07:51
|
А кстати, в каком модуле у тебя этот код?
|
|||
3
D_Pavel
30.03.12
✎
07:56
|
В общем модуле. Галочки в свойствах стоят 4 штуки.
|
|||
4
D_Pavel
30.03.12
✎
07:57
|
Поменял местами, то же самое
|
|||
5
D_Pavel
30.03.12
✎
07:59
|
Управляемое приложение
|
|||
6
Defender aka LINN
30.03.12
✎
08:03
|
Разноси по разным модулям.
|
|||
7
spock
30.03.12
✎
08:05
|
и вновь продолжается бой..
|
|||
8
D_Pavel
30.03.12
✎
08:07
|
(6) разносил. Не работает. Метод не обнаружен пишет.
|
|||
9
ShoGUN
30.03.12
✎
08:09
|
Галка "вызов сервера" стоит в свойствах модуля?
|
|||
10
vicof
30.03.12
✎
08:11
|
(8) Экспорт писал?
|
|||
11
D_Pavel
30.03.12
✎
08:16
|
(9) Поставил, никакой разницы
(10) Писал: &НаСервере Функция ПодключитьВнешнююОбработку(Знач стрАдрес) Экспорт Сообщить("Золупа"); КонецФункции &НаКлиенте Функция Команда1() стрАдрес = ""; УниверсальныеМеханизмы.ПодключитьВнешнююОбработку(стрАдрес); КонецФункции Ошибка: Метод объекта не обнаружен (ПодключитьВнешнююОбработку) |
|||
12
bake
30.03.12
✎
08:19
|
&НаСервере
Функция ПодключитьВнешнююОбработку(Знач стрАдрес) Экспорт Сообщить("Золупа"); КонецФункции В отдельный модуль с галками Сервер и Вызов с севрера |
|||
13
Stepa86
30.03.12
✎
08:23
|
директивы компиляции работают только в модуле формы и в модуле команды (в СП написано, что и в общем модуле, но у меня ни разу нормально не получилось заюзать их и не вижу смысла их там использовать).
Если нужно разделить работу методов на клиентские и на серверные, то надо или юзать инструкции препроцессору или (что правильнее) разнести по разным модулям |
|||
14
D_Pavel
30.03.12
✎
08:28
|
(13) Спасибо.
|
|||
15
Ненавижу 1С
гуру
30.03.12
✎
08:28
|
потому что архитекторы 1С такие
|
|||
16
ll13
30.03.12
✎
10:55
|
(13) Не ври.
(0) А ты читай документацию внимательно и вдумчиво. Если у общего модуля стоят галки и "клиент" и "сервер", то будет скомпилировано 2(!) экземпляра этого модуля - один на стороне сервера, другой на стороне клиента. - В серверный экземпляр попадут все процедуры и функции объявленные с директивой &НаСервере, а так же без дериктив(что равнозначно &НаСервере) - В клиентский - те что объявлены &НаКлиенте. Если при этом у модуля стоит галка "вызов сервера", то вызов процедур серверного модуля доступен с клиента. При вызове процедуры, работает правило "ближнего вызова", т.е. если вызов идет с клиента то вызывается процедура из КЛИЕНТСКОГО экземпляра модуля, если с сервера - то СЕРВЕРНОГО. Улавливаешь в чем твоя ошибка ? &НаКлиенте Функция Команда1() Экспорт ..... стрИмя = ПодключитьВнешнююОбработку(стрАдрес); КонецФункции Это вызов функции из КЛИЕНТСКОГО экземпляра модуля(!), а её там нет )) Потому что она объявлена с директивой &НаСервере и находится разумеется в СЕРВЕРНОМ экземпляре модуля. |
|||
17
Stepa86
30.03.12
✎
11:04
|
(16) хде?
|
|||
18
D_Pavel
30.03.12
✎
11:05
|
(16) И что? Есть возможность вызвать серверный экземпляр модуля из клиентского экземпляра того же модуля?
|
|||
19
D_Pavel
30.03.12
✎
13:00
|
А? А то пришлось сделать копию общего модуля с другим именем.
|
|||
20
ll13
30.03.12
✎
14:20
|
(18, 19) Нет, нельзя.
Но ты можешь вызвать метод серверного модуля из формы Пример: // В общем клиент-серверном модуле с галкой вызов сервера &НаСервере Процедура Тест() Экспорт Сообщить("Это сервер"); КонецПроцедуры &НаКлиенте Процедура Тест() Экспорт Сообщить("Это клиент"); КонецПроцедуры // Модуль формы &НаКлиенте Процедура Команда1(Команда) МодульКлиентСервер.Тест(); // КЛИЕНТСКИЙ ЭКЗЕМПЛЯР МОДУЛЯ ВызовСервера(); КонецПроцедуры &Насервере Процедура ВызовСервера() МодульКлиентСервер.Тест(); // СЕРВЕРНЫЙ ЭКЗЕМПЛЯР МОДУЛЯ КонецПроцедуры |
|||
21
D_Pavel
02.04.12
✎
08:01
|
С формами понятно.
|
|||
22
ll13
02.04.12
✎
08:21
|
(16) + точнее процедура объявленная без директив &наклиенте или &насервере будет скомпилирована и тат и там
|
|||
23
AlexNew
02.04.12
✎
08:44
|
(0) А сервер то есть? Или ты пытаешься отладить на локальной?
|
|||
24
vmv
02.04.12
✎
08:45
|
чиать (16) - думать.
хватит переливать их пустого в порожнее, думал уже все поменяли психологию со времен корявой 7.7 |
|||
25
D_Pavel
02.04.12
✎
09:13
|
(23) Конечно есть. На локальном бы такой проблемы не возникало.
(24) это ты кому? |
|||
26
5 Элемент
02.04.12
✎
10:26
|
(3) в общих модулях нельзя использовать директивы, учи матчасть студент
|
|||
27
D_Pavel
02.04.12
✎
12:52
|
(26) Проверка синтаксиса однако звисит от директив в общих модулях!
|
|||
28
ll13
02.04.12
✎
12:56
|
(26) Вот блин...
Ты это разработчикам типовых расскажи, и тем кто документацию пишет, а то они видимо не в курсе ... |
|||
29
5 Элемент
02.04.12
✎
13:00
|
(28) где ты в типовых это видел?
|
|||
30
ll13
02.04.12
✎
13:05
|
(29) УТ 11
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |