Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Веб-клиент Вызвать серверную функцию из клиентской во внешнем модуле 2 страниц V   1 2 >          
vbi Подменю пользователя
сообщение 20.09.11, 11:47
Сообщение #1

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Значит есть 1С 8.2: Веб-клиент (на тонком клиенте то же самое).
Есть общий модуль: Не глобальный, стоят галки: "Клиент управляемое приложение, сервер, вызов сервера"
В этом модуле - всего две функции: Одна на сервере, другая на клиенте. Понятно та что на клиенте вызывает ту что на сервере.

Но вот беда: Клиентская функция не находит серверную.

Содержание внешнего модуля:
&НаКлиенте
Функция ВыполнитьПроверку() Экспорт

    РазницаВремениКлиент =  ВыполнитьПроверкуНаСервере();    
    Если Не РазницаВремениКлиент Тогда
        ЗавершитьРаботуСистемы(Ложь);    
    КонецЕсли;
    Возврат РазницаВремениКлиент;
КонецФункции


&НаСервере
Функция ВыполнитьПроверкуНаСервере()
    Если ...

...

    КонецЕсли;
    Возврат Истина;    
КонецФункции


Когда вызывается метод "ВыполнитьПроверку()" из клиента, выдается ошибка:
Цитата
{ОбщийМодуль.ПроверкаРазницыВремениКлиент.Модуль(10,26)}: Процедура або функція з вказаним ім`ям не визначена (ВыполнитьПроверкуНаСервере)
РазницаВремениКлиент = <<?>>ВыполнитьПроверкуНаСервере(); (Перевірка: Веб-клієнт)


Если делаю вот так:
&НаКлиенте
Функция ВыполнитьПроверку() Экспорт

    РазницаВремениКлиент =  ПроверкаРазницыВремениКлиент.ВыполнитьПроверкуНаСервере();    
    Если Не РазницаВремениКлиент Тогда
        ЗавершитьРаботуСистемы(Ложь);    
    КонецЕсли;
    Возврат РазницаВремениКлиент;
КонецФункции


&НаСервере
Функция ВыполнитьПроверкуНаСервере() Экспорт
    Если ...

...

    Возврат Истина;    
КонецФункции


то проверка модуля ошибок не находит, но при запуске приложения в обычном приложении (кстате для модуля еще стоит галочка клиент (обычное приложение)), то в предприятии выдается та же ошибка :

Цитата
{ОбщийМодуль.ПроверкаРазницыВремениКлиент.Модуль(10)}: Метод об`єкту не виявлено (ВыполнитьПроверкуНаСервере)
РазницаВремениКлиент = ПроверкаРазницыВремениКлиент.ВыполнитьПроверкуНаСервере();


В чем же проблема?

Вот свойства модуля:



Если убираю "&НаСервере" у второй процедуры - все работает в обычном приложении, но тогда в управляемом не работает.


Signature
Впроваджую, супроводжую

logist Подменю пользователя
сообщение 20.09.11, 12:22
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Директивы типа "&НаСервере" в общих модулях не исполняются. Эти директивы уже указаны в свойствах модуля. Выносите код по разным модулям (отдельно клиент и отдельно сервер).


Signature
Личные бесплатные консультации не даю, для этого есть форум!

vbi Подменю пользователя
сообщение 20.09.11, 13:14
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Цитата(logist @ 20.09.11, 13:22) *
Директивы типа "&НаСервере" в общих модулях не исполняются. Эти директивы уже указаны в свойствах модуля. Выносите код по разным модулям (отдельно клиент и отдельно сервер).

Даа... туго прийдется, поскольку мне нужно написать управляемый интерфейс для УТП для Украины...
Но если я уберу директиву "&НаСервере" - то лезут ошибки в упр. приложении. Если у модуля стоит что он доступен и на клиенте и на сервере - значит методы в нем могут выполнятся и там и там. Вот только какую из какой нужно вызывать? Не подскажете хорошую литературу, где детально разжевано, что можно из чего запускать в режиме тонкого и ВЕБ-клиента на модулях и в формах?
В Радченко, 1С:Предприятие 8.2 Практическое пособие разработчика - очень мало про общие модули sad.gif


Signature
Впроваджую, супроводжую

Flexy Подменю пользователя
сообщение 20.09.11, 13:20
Сообщение #4

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

В Синтакс-помощнике => Директивы Компиляции, не пробовали смотреть?

logist Подменю пользователя
сообщение 20.09.11, 13:41
Сообщение #5

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(vbi @ 20.09.11, 14:14) *
поскольку мне нужно написать управляемый интерфейс для УТП для Украины...

Утопично smile.gif


Signature
Личные бесплатные консультации не даю, для этого есть форум!

vbi Подменю пользователя
сообщение 20.09.11, 13:58
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Цитата(Flexy @ 20.09.11, 14:20) *
В Синтакс-помощнике => Директивы Компиляции, не пробовали смотреть?

Смотрел, но про общие модули там ни слова.
Ладно, наверно верну все как было - обеспечу нормальную работу клиент-серверного варианта толстого клиента обычного приложения. А ве необходимые методы в управляемом интерфейсе буду писать в отдельные модули...
И все же... можно ведь установить галки: Клиент(управляемое приложение) и серер одновременно. Но неужели нельзя вызвать из клиентской процедуры серверную в одном и том же модуле?


Signature
Впроваджую, супроводжую

logist Подменю пользователя
сообщение 20.09.11, 15:24
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(vbi @ 20.09.11, 14:58) *
можно ведь установить галки: Клиент(управляемое приложение) и серер одновременно.

В этом случае выполнение одного кода должно обеспечиваться и там и там.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

vbi Подменю пользователя
сообщение 21.09.11, 8:13
Сообщение #8

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Цитата(logist @ 20.09.11, 16:24) *
В этом случае выполнение одного кода должно обеспечиваться и там и там.


Правильно! То есть некоторые методы будут вызыватся на клиенте, а некоторые на сервере. Но тогда в толстом клиенте обычное приложение вызвать серверную функцию из такого модуля, из клиентской функции этого же модуля не получается. Ошибка (смотрите выше).


Signature
Впроваджую, супроводжую

kivals Подменю пользователя
сообщение 21.09.11, 8:32
Сообщение #9

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 105
Из: Киев
Спасибо сказали: 27 раз
Рейтинг: 0

Цитата(vbi @ 21.09.11, 9:13) *
Правильно! То есть некоторые методы будут вызыватся на клиенте, а некоторые на сервере. Но тогда в толстом клиенте обычное приложение вызвать серверную функцию из такого модуля, из клиентской функции этого же модуля не получается. Ошибка (смотрите выше).


А никто и не говорил, что так должно работать. Одновременные галки клиент и сервер говорят о том, что функции этого модуля могут вызываться как с клиентской стороны, так и с серверной. А вот правильность работы функций Вы должны обспечить самостоятельно. Как Вам верно порекомендовали - для вашей задачи модуль нужно разбить на 2: клиенткий и серверный (с признаком "вызов сервера") и из клиентского вызывать серверную функцию.

DartRomanius Подменю пользователя
сообщение 21.09.11, 10:18
Сообщение #10

Ветеран
Иконка группы
Группа: Местный
Сообщений: 824
Из: Запорожье
Спасибо сказали: 145 раз
Рейтинг: 0

В связи с тем что в контексте вызовов общего модуля доступ к разным процедурам функциям происходит в зависимости от контекста (клиент, сервер).

То в контексте выполнения клиентской процедуры доступ к серверной напрямую не происходит так как они "лежат" в разных контекстах
как вариант:

&НаКлиенте
Процедура ПроцедураНаКлиенте() Экспорт
    // вызвов серверной
    НаименованиеОбщегоМодуля.ПроцедураНаСервере();
....
КонецПроцедуры

&НаСервере
Процедура ПроцедураНаСервере() Экспорт
.....
КонецПроцедуры


Signature
-----------------------------------------------------------------------------------
Единственный, интуитивно понятный интерфейс - мамкина сиська!
Всему остальному надо учиться! (с) Не знаю кто....

vbi Подменю пользователя
сообщение 22.09.11, 9:53
Сообщение #11

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Я уже не знаю... Сделал как вы сказали:
Цитата
&НаКлиенте
Процедура ПроцедураНаКлиенте() Экспорт
// вызвов серверной
НаименованиеОбщегоМодуля.ПроцедураНаСервере();
....
КонецПроцедуры

&НаСервере
Процедура ПроцедураНаСервере() Экспорт
.....
КонецПроцедуры


При вызове процедуры ПроцедураНаКлиенте() получаю ошибку:
Цитата
{ОбщийМодуль.НаименованиеОбщегоМодуля.Модуль(5)}: Метод об`єкту не виявлено (ПроцедураНаСервере)
Возврат НаименованиеОбщегоМодуля.ПроцедураНаСервере();

В серверном модуле стоят галки: клиент, сервер, вызов сервера.


Signature
Впроваджую, супроводжую

logist Подменю пользователя
сообщение 22.09.11, 9:57
Сообщение #12

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(vbi @ 22.09.11, 10:53) *
При вызове процедуры ПроцедураНаКлиенте() получаю ошибку:

Цитата
Возврат НаименованиеОбщегоМодуля.ПроцедураНаСервере();

Процедура не может "Возвращать", в таком случае это должна быть функция.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

vbi Подменю пользователя
сообщение 22.09.11, 10:22
Сообщение #13

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Извеняюсь, в моем примере это функции. Привожу свой код полностью

Модуль "уиОбщегоНазначения" (стоит галка сервер, вызов сервера):
...

// Ф ункция возвращает значение экспортных переменных модуля приложений из параметра сеанса
// Необходмо для возможности создания объектов на сервере
&НаСервереБезКонтекста   // Пробовал &НаСервере - то же самое
Функция ПолучитьЗначениеПеременной(ИмяПараметра, Кэш = Неопределено, КэшИзменен = Ложь) Экспорт
    
    Если Кэш = Неопределено Тогда
        // Кэш не был проинициализирован
        Кэш = Новый Структура;
    Иначе

...

    КэшИзменен = Истина;
    
    Возврат НайденноеЗначение;
    
КонецФункции


...


Модуль "уиОбщегоНазначенияКлиент" (стоит галка клиент (управляемая)):
&НаКлиенте
Функция ПолучитьЗначениеПеременной(ИмяПараметра, Кэш = Неопределено, КэшИзменен = Ложь) Экспорт
    Возврат уиОбщегоНазначения.ПолучитьЗначениеПеременной(ИмяПараметра, Кэш, КэшИзменен);    
КонецФункции


При вызове клиентской функции получаю ошибку:

Цитата
{ОбщийМодуль.уиОбщегоНазначенияКлиент.Модуль(5)}: Метод об`єкту не виявлено (ПолучитьЗначениеПеременной)
Возврат уиОбщегоНазначения.ПолучитьЗначениеПеременной(ИмяПараметра, Кэш, КэшИзменен);


Кстате, имею дело с тонким/веб клиентом, если это важно...


Signature
Впроваджую, супроводжую

logist Подменю пользователя
сообщение 22.09.11, 10:26
Сообщение #14

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Уберите "&НаСервереБезКонтекста"

Цитата
Модуль "уиОбщегоНазначения" (стоит галка сервер, вызов сервера):

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

Собственно если
Цитата
Модуль "уиОбщегоНазначенияКлиент" (стоит галка клиент (управляемая)):

То процедуры тоже не надо предварять директивами НаКлиенте, т.к. из свойств понятно что они выполняются только на клиенте.

p.s. и вернулись к тому что я сразу написал - разнести процедуры по разным модулям...


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: vbi,

vbi Подменю пользователя
сообщение 22.09.11, 10:38
Сообщение #15

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

ohmy.gif так работает!!! А почему с директивой &НаСервереБезКонтекста и &НаСервере не работает то?

... наверно потому, что происходит вызов сервера (ну когда я из клиентской процедуры вызываю серверную). Даа.. ТонкийКлиент - дкло тонкое. Поставил лишнюю директиво, с которой оно должно в принципе работать тоже и все. Не работает. Теперь разобрался, спасибо за помощь!


Signature
Впроваджую, супроводжую

logist Подменю пользователя
сообщение 22.09.11, 10:44
Сообщение #16

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(vbi @ 22.09.11, 11:33) *
А почему с директивой &НаСервереБезКонтекста и &НаСервере не работает то?

&НаСервереБезКонтекста - не доступна в общих модулях.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

vbi Подменю пользователя
сообщение 22.09.11, 10:45
Сообщение #17

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

&НаСервере - тоже не работает


Signature
Впроваджую, супроводжую

logist Подменю пользователя
сообщение 22.09.11, 10:47
Сообщение #18

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(vbi @ 22.09.11, 11:45) *
&НаСервере - тоже не работает

Потому что в свойствах "Вызов сервера", если убрать то должно работать smile.gif


Signature
Личные бесплатные консультации не даю, для этого есть форум!

vbi Подменю пользователя
сообщение 22.09.11, 10:59
Сообщение #19

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Вобщем я разобрался smile.gif можно не разделять модули на клиентский и серверный. Создать один модуль, поставить там галочки клиент, сервер, вызов сервера... аа.. что мне жалко что-ли - поставить все галочки, которые там есть. Единственное - перед всеми процедурами и функциями не нужно писать никаких директив - и все будет прекрастно работать: Вызываеш из клиентской процедуры формы - какуюто процедуру из общего модуля, которая, там, запрос создает и выполняет - и все будет работать! 63000000.gif (по крайней мере у меня так работает smile.gif)

Хотя нет, нужно ставить только "сервер" и "вызов сервера".


Signature
Впроваджую, супроводжую

logist Подменю пользователя
сообщение 22.09.11, 11:14
Сообщение #20

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(vbi @ 22.09.11, 11:59) *
Вобщем я разобрался smile.gif можно не разделять модули на клиентский и серверный. Создать один модуль, поставить там галочки клиент, сервер, вызов сервера... аа.. что мне жалко что-ли - поставить все галочки, которые там есть.

Ну в принципе да, нахер задумываться о том, для чего они предназначены, и пофиг на все, "а бы работало"...


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 18.04.24, 7:02
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!