Клиент- серверные вызовы

Публикация № 86838

Программирование - Практика программирования

118
В платформе 8.2 в управляемом приложении  для оптимизации работы приложений предлагается разделение функции клиента и сервера. Программный код  в 1С располагается в различных модулях, модуле объекта, модуле формы, общих модулях и т.д.  Процедуры и функции каждого модуля могут компилироваться  как на сервере, так и на клиенте. Рассмотрим возможности  вызова различных процедур и функции из процедур, компилируемых на стороне сервера,  и   процедур, компилируемых на стороне клиента.

 

В платформе 8.2 в управляемом приложении  для оптимизации работы приложений предлагается разделение функции клиента и сервера.  На клиенте, например, нельзя обращаться к данным БД. А на стороне сервера не доступны данные формы, в модуле которой находится процедура с директивой &НаСервереБезКонтекста. Программный код  в 1С располагается в различных модулях, модуле объекта, модуле формы, общих модулях и т.д.  Процедуры и функции каждого модуля могут компилироваться  как на сервере, так и на клиенте. Рассмотрим возможности  вызова различных процедур и функции из процедур, компилируемых на стороне сервера,  и   процедур, компилируемых на стороне клиента.

Итак, со стороны клиента можно вызывать

1)      клиентские процедуры данного модуля,  с директивой &НаКлиенте;

 

2)      серверные процедуры данного модуля,  с директивой &НаСервере;

 

3)      клиентские процедуры  общего модуля, с директивой &НаКлиенте(при условии наличия в свойствах доступности в нескольких контекстах, «Клиент» обязателен и др.);

 

 

 

 

 

4)      все процедуры клиентского общего модуля , в свойствах общего модуля должно быть только  свойство «Клиент(управляемое приложение)». Директиву &НаКлиенте в общем модуле в этом случае не пишут;

 

 

 

 

5)      процедуры серверного общего модуля, но с дополнительным свойством «Вызов сервера», причем важно чтобы  общий модуль  имел  только свойство компиляции на  сервере.

 


 

Со стороны сервера можно вызывать

1)      серверные процедуры данного модуля, с директивой компиляции &НаСервере;

 

2)      все процедуры серверного общего модуля, причем в свойствах общего модуля должно быть только свойство «Сервер». Директиву &НаСервере в общем модуле в этом случае не пишут;

 

 

 

 

3)      процедуры общего модуля, с директивой &НаСервере (при условии наличия в свойствах доступности в нескольких контекстах, «Сервер» обязателен и др).

 

 

Кроме того, если в свойствах общего модуля указаны несколько мест компиляции «Клиент, Сервер»,  а в процедуре не указана никакая директива компиляции, то в этом случае процедура  будет скомпилирована и на стороне сервера, и на стороне клиента. И ее можно вызывать соответственно и из клиентских методов, и из серверных. В этом случае нужно внимательно использовать процедуру, необходимо чтобы ее код  мог выполняться и на сервере, и на клиенте.

Существует еще одна особенность. В одном общем модуле, имеющем несколько мест компиляции («Сервер, клиент») нельзя вызывать из клиентской процедуры серверную того же модуля, даже если поставить галку «вызов сервера». Свойство «вызов сервера» имеет смысл при наличии только одного свойства общего модуля «компиляции на Сервере».

Существуют рекомендации использовать общие модули, скомпилированные только на сервере или только на клиенте. Соответственно использовать в модуле со свойством «Клиент» все клиентские модули, а в модуле со свойством «сервер» использовать все серверные методы.

Еще одно удобное свойство общего модуля. Если в свойствах общего модуля активировать свойство «Глобальный», то процедуры этого модуля можно вызывать напрямую, без  имени общего модуля.

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

 

 

 

 

118

См. также

Специальные предложения