Имя: Пароль:
1C
 
Вызов клиентской процедуры из серверной в общем модуле
0 Aleksey1989
 
18.08.15
13:37
Добрый день. Знаю, что из сервера клиент вызвать никак не получится, но посоветуйте, пжл, что-нибудь. В общем модуле есть процедура с директивой компиляции &НаКлиенте. Необходимо обеспечить ее запуск время от времени. С помощью регламентного задания, насколько мне известно, эту проблему не решить, т.к. там можно указывать только процедуры с директивами компиляции &НаСервере.
Подскажите, пжл, выход из ситуации?
1 Nuobu
 
18.08.15
13:53
(0) &НаКлиентеНаСервереБезКонтекста
2 Aleksey1989
 
18.08.15
15:28
(1) Не помогает, при попытке сохранить регламентное задание возникает ошибка "Метод задания не найден"
3 ДенисЧ
 
18.08.15
15:30
Перенести процедуру НаСервер
4 DexterMorgan
 
18.08.15
15:32
Знаю, что из сервера клиент вызвать никак не получится, но посоветуйте, пжл, что-нибудь

Жж0шь
5 Aleksey1989
 
18.08.15
15:39
(3) Проблема в том, что процедура, которая находится в общем модуле, запускает другую клиентскую процедуру. Эту самую другую клиентскую процедуру перенести не получится.
6 Nuobu
 
18.08.15
15:40
(5) Чего не получится? ВнешняяОбработка?
7 Aleksey1989
 
18.08.15
15:44
(6) Эта операция должна выполняться периодически, поэтому и сначала решил использовать регл. задания, пока не понял, что они работают только с серверными процедурами.

Похоже, придется решить проблему через виндовый диспетчер заданий, другого пути не вижу.
8 Nuobu
 
18.08.15
15:45
(7) А сделать серверную ф-ю никак?
9 Aleksey1989
 
18.08.15
15:47
(8) нет, не получится - моя функция должна запускать другую, типовую клиентскую.
10 Nuobu
 
18.08.15
15:50
(9) Так типовую переделай.
Не обязательно переделывать именно эту типовую ф-ю.
Можно ведь свою наваять. Точно такую же, только она будет делаться на сервере и сделать так, чтобы при обновлении она тоже "обновилась".
11 Дык ё
 
18.08.15
15:50
(9) ПодключитьОбработчикОжидания ?
12 vvp91
 
18.08.15
16:03
В общем модуле доступны только две директивы компиляции &НаКлиенте и &НаСервере. Общие директивы для общих модулей не определены.
Вариант следующий:
* общий модуль должен иметь признаки "Клиент (управляемое приложение)", "Сервер", "Вызов сервера".
* в этом общем модуле 3 метода - первый без директивы компиляции, второй с директивой &НаКлиенте, третий с директивой &НаСервере.
* первый метод может быть вызван как из второго метода, так и из третьего;
* вызов из клиентского метода формы через второй метод работает на клиенте;
* вызов из серверного метода формы через третий метода работает на сервере;

Таким образом имеем один метод (первый) как для серверного, так и для клиентского исполнения.
В общем случае достаточно не указывать директивы компиляции в общем методе, и нет необходимости писать заглушки с директивами копиляции. "Вызов сервера" у модуля тоже не особенно нужен.
Разницу поведения потрохов первого метода на клиенте и на сервере можно организовать через инструкции препроцессора.

Проверено для форм, для регл.заданий тестируй сам.
13 Aleksey1989
 
19.08.15
08:14
(12) Это не будет работать в общем модуле.
14 Aleksey1989
 
19.08.15
08:37
В общем, наиболее лучшим решением для себя я нашел следующее:
1. Создаю внешнюю обработку, в событии открытия формы которой добавляю строку кода запуска необходимой мне процедуры, которая выполняется НаКлиенте в общем модуле. После этого обработка закрывает 1С.
2. Создаю регламентное задание, в котором указываю запуск требуемой базы 1С с обязательным параметром Execute, в котором указываю путь к моей внешней обработке.


(11) ПодключитьОбработчикОжидания - этот способ не подойдет мне по той причине, что постоянно д.б. запущен сеанс 1С.
П.с. База работает в клиент-серверном режиме.
15 vvp91
 
19.08.15
11:19
(13) Что "это" не будет работать в общем модуле?
16 Aleksey1989
 
19.08.15
12:41
(15) - описанная последовательность действий.

Я создал общий модуль, проставил для него галки Клиент, Сервер, ВызовСервера, создал в нем 3 процедуры: Процедура1 без какой-либо директивы компиляции, Процедура2 с директивой компиляции НаСервере и Процедура3 с директивой компиляции НаКлиенте.
Далее создаю регламентное задание, указываю для запуска Процедура2.

Процедура2 вызывает Процедура1, а та, в свою очередь, должна вызвать Процедура3, но этого не происходит, т.к. Процедура1 не видит Процедура3.

Если я понял (12), то предполагалась именно такая последовательность, разве не так?
17 ДенисЧ
 
19.08.15
12:51
я бы рекомендовал ТС написать заявление по собственному в связи с полным служебным несоответствием
18 vvp91
 
19.08.15
13:31
(16) Не совсем так.
В твоем случае
- убери у процедуры, которую надо вызывать, директиву компиляции &НаКлиенте;
- убедись, что общий модуль имеет признаки клиента и сервера.
19 hhhh
 
19.08.15
14:12
(16) в общем модуле директивы эти не работают.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.