Значит есть 1С 8.2: Веб-клиент (на тонком клиенте то же самое). Есть общий модуль: Не глобальный, стоят галки: "Клиент управляемое приложение, сервер, вызов сервера" В этом модуле - всего две функции: Одна на сервере, другая на клиенте. Понятно та что на клиенте вызывает ту что на сервере.
Но вот беда: Клиентская функция не находит серверную.
Содержание внешнего модуля:
&НаКлиенте Функция ВыполнитьПроверку() Экспорт
РазницаВремениКлиент = ВыполнитьПроверкуНаСервере(); Если Не РазницаВремениКлиент Тогда ЗавершитьРаботуСистемы(Ложь); КонецЕсли; Возврат РазницаВремениКлиент; КонецФункции
&НаСервере Функция ВыполнитьПроверкуНаСервере() Если ...
...
КонецЕсли; Возврат Истина; КонецФункции
Когда вызывается метод "ВыполнитьПроверку()" из клиента, выдается ошибка:
Цитата
{ОбщийМодуль.ПроверкаРазницыВремениКлиент.Модуль(10,26)}: Процедура або функція з вказаним ім`ям не визначена (ВыполнитьПроверкуНаСервере) РазницаВремениКлиент = <<?>>ВыполнитьПроверкуНаСервере(); (Перевірка: Веб-клієнт)
Если делаю вот так:
&НаКлиенте Функция ВыполнитьПроверку() Экспорт
РазницаВремениКлиент = ПроверкаРазницыВремениКлиент.ВыполнитьПроверкуНаСервере(); Если Не РазницаВремениКлиент Тогда ЗавершитьРаботуСистемы(Ложь); КонецЕсли; Возврат РазницаВремениКлиент; КонецФункции
&НаСервере Функция ВыполнитьПроверкуНаСервере() Экспорт Если ...
...
Возврат Истина; КонецФункции
то проверка модуля ошибок не находит, но при запуске приложения в обычном приложении (кстате для модуля еще стоит галочка клиент (обычное приложение)), то в предприятии выдается та же ошибка :
Цитата
{ОбщийМодуль.ПроверкаРазницыВремениКлиент.Модуль(10)}: Метод об`єкту не виявлено (ВыполнитьПроверкуНаСервере) РазницаВремениКлиент = ПроверкаРазницыВремениКлиент.ВыполнитьПроверкуНаСервере();
В чем же проблема?
Вот свойства модуля:
Если убираю "&НаСервере" у второй процедуры - все работает в обычном приложении, но тогда в управляемом не работает.
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Директивы типа "&НаСервере" в общих модулях не исполняются. Эти директивы уже указаны в свойствах модуля. Выносите код по разным модулям (отдельно клиент и отдельно сервер).
Личные бесплатные консультации не даю, для этого есть форум!
Директивы типа "&НаСервере" в общих модулях не исполняются. Эти директивы уже указаны в свойствах модуля. Выносите код по разным модулям (отдельно клиент и отдельно сервер).
Даа... туго прийдется, поскольку мне нужно написать управляемый интерфейс для УТП для Украины... Но если я уберу директиву "&НаСервере" - то лезут ошибки в упр. приложении. Если у модуля стоит что он доступен и на клиенте и на сервере - значит методы в нем могут выполнятся и там и там. Вот только какую из какой нужно вызывать? Не подскажете хорошую литературу, где детально разжевано, что можно из чего запускать в режиме тонкого и ВЕБ-клиента на модулях и в формах? В Радченко, 1С:Предприятие 8.2 Практическое пособие разработчика - очень мало про общие модули
В Синтакс-помощнике => Директивы Компиляции, не пробовали смотреть?
Смотрел, но про общие модули там ни слова. Ладно, наверно верну все как было - обеспечу нормальную работу клиент-серверного варианта толстого клиента обычного приложения. А ве необходимые методы в управляемом интерфейсе буду писать в отдельные модули... И все же... можно ведь установить галки: Клиент(управляемое приложение) и серер одновременно. Но неужели нельзя вызвать из клиентской процедуры серверную в одном и том же модуле?
В этом случае выполнение одного кода должно обеспечиваться и там и там.
Правильно! То есть некоторые методы будут вызыватся на клиенте, а некоторые на сервере. Но тогда в толстом клиенте обычное приложение вызвать серверную функцию из такого модуля, из клиентской функции этого же модуля не получается. Ошибка (смотрите выше).
Правильно! То есть некоторые методы будут вызыватся на клиенте, а некоторые на сервере. Но тогда в толстом клиенте обычное приложение вызвать серверную функцию из такого модуля, из клиентской функции этого же модуля не получается. Ошибка (смотрите выше).
А никто и не говорил, что так должно работать. Одновременные галки клиент и сервер говорят о том, что функции этого модуля могут вызываться как с клиентской стороны, так и с серверной. А вот правильность работы функций Вы должны обспечить самостоятельно. Как Вам верно порекомендовали - для вашей задачи модуль нужно разбить на 2: клиенткий и серверный (с признаком "вызов сервера") и из клиентского вызывать серверную функцию.
При вызове процедуры ПроцедураНаКлиенте() получаю ошибку:
Цитата
{ОбщийМодуль.НаименованиеОбщегоМодуля.Модуль(5)}: Метод об`єкту не виявлено (ПроцедураНаСервере) Возврат НаименованиеОбщегоМодуля.ПроцедураНаСервере();
В серверном модуле стоят галки: клиент, сервер, вызов сервера.
// Ф ункция возвращает значение экспортных переменных модуля приложений из параметра сеанса // Необходмо для возможности создания объектов на сервере &НаСервереБезКонтекста // Пробовал &НаСервере - то же самое Функция ПолучитьЗначениеПеременной(ИмяПараметра, Кэш = Неопределено, КэшИзменен = Ложь) Экспорт
Если Кэш = Неопределено Тогда // Кэш не был проинициализирован Кэш = Новый Структура; Иначе
{ОбщийМодуль.уиОбщегоНазначенияКлиент.Модуль(5)}: Метод об`єкту не виявлено (ПолучитьЗначениеПеременной) Возврат уиОбщегоНазначения.ПолучитьЗначениеПеременной(ИмяПараметра, Кэш, КэшИзменен);
Кстате, имею дело с тонким/веб клиентом, если это важно...
так работает!!! А почему с директивой &НаСервереБезКонтекста и &НаСервере не работает то?
... наверно потому, что происходит вызов сервера (ну когда я из клиентской процедуры вызываю серверную). Даа.. ТонкийКлиент - дкло тонкое. Поставил лишнюю директиво, с которой оно должно в принципе работать тоже и все. Не работает. Теперь разобрался, спасибо за помощь!
Вобщем я разобрался можно не разделять модули на клиентский и серверный. Создать один модуль, поставить там галочки клиент, сервер, вызов сервера... аа.. что мне жалко что-ли - поставить все галочки, которые там есть. Единственное - перед всеми процедурами и функциями не нужно писать никаких директив - и все будет прекрастно работать: Вызываеш из клиентской процедуры формы - какуюто процедуру из общего модуля, которая, там, запрос создает и выполняет - и все будет работать! (по крайней мере у меня так работает )
Хотя нет, нужно ставить только "сервер" и "вызов сервера".
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(vbi @ 22.09.11, 11:59)
Вобщем я разобрался можно не разделять модули на клиентский и серверный. Создать один модуль, поставить там галочки клиент, сервер, вызов сервера... аа.. что мне жалко что-ли - поставить все галочки, которые там есть.
Ну в принципе да, нахер задумываться о том, для чего они предназначены, и пофиг на все, "а бы работало"...
Личные бесплатные консультации не даю, для этого есть форум!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!