Інструкції препроцесора & насерверенакліенте і & накліентенасерверебезконтекста

В курс справи

Процедури і функції в модулях керованих форм, а також в загальних клієнтських модулях керованого застосування, вимагають чіткого визначення середовища виконання програмного коду.







Для цих цілей, в цілому, використовуються п'ять директив препроцесора: НаКліенте, На сервері, НаСервереБезКонтекста, НаКліентеНаСервереБезКонтекста, НаКліентеНаСервере. Перші три використовуються досить часто при розробці конфігуарціі. Останні ж дві - велика рідкість. Саме про них і йтиметься сьогодні в статті.

НаСервереНаКліенте

Дана директива може застосовуватися тільки в модулі команди. Сама процедура або функція, оголошена з такою директивою, може бути використана як на стороні клієнта, так і на стороні сервера в модулі команди. Наведу приклад використання в команді довідника. Для цього в тестовій конфігурації додамо команду "Тестуємо" для справовочніка "ПростойСправочнік":

Інструкції препроцесора & amp; насерверенакліенте і & amp; накліентенасерверебезконтекста

Модуль команди містить наступний програмний код:

Тепер розглянемо поведінку платформи при її виконанні. Викличемо команду в режимі підприємства і проаналізуємо кількість викликів сервера. Картина буде наступною:

Інструкції препроцесора & amp; насерверенакліенте і & amp; накліентенасерверебезконтекста

Таким чином, при виклику процедури з директивою препроцесора "НаКліентеНаСервере" з клієнтської сторони виклику сервера не відбувається. Єдиний виклик сервера в нашому прмере відбувався при зверненні до серверної процедурі "Сервер".







З усього вищесказаного можна зробити висновок, що процедури і функції з директивою "НаКліентеНаСервере" фактично має ті ж можливості, що і клієнтські процедури і функції з директивою "НаКліенте". Використання директиви "НаКліентеНаСервере" дозволяє викликати будь-які процедури модуля команди, а також отримувати доступ до клієнтського контексту форми.

На мій погляд, використання подібних процедур і функцій ускладнює читабельність програмного коду. Якщо використовувати директиви "НаКліенте", "НаСервере" і "НаСервереБезКонтекста", то код буде більш зрозумілим і передбачуваним.

Розглянемо тепер роботу процедур і функцій з директивою "НаКліентеНаСервереБезКонтекста".

НаКліентеНаСервереБезКонтекста

Директива "НаКліентеНаСервереБезКонтекста" може бути використана в модулях керованих форм на клієнті і на сервері. При цьому такі процедури і функції не можуть отримати доступ до контексту форми, всіх експортних змінним форми, але ви можете телефонувати процедур і функцій з серверних загальних модулів, а тажке не глобальне серверних і кліенскіх одночасно.

Розглянемо невеликий приклад їх використання. У модулі форми елемента довідника "ПростойСправочнік" напишемо наступний програмний код:

Процедура "Тестуємо" належить команді форми. При її запуску здійснюється виклик процедури "ТестіруемКліентСервер" з директивою "НаКліентеНаСервереБезКонтекста". Як було сказано вище, дана процедура не зможе отримати доступ до контексту форми і іншим клієнтським процедурам. Але все серверні процедури модуля форми без контексту будуть доступні для виклику, а також серверні процедури загального модуля.

Виклик сервера буде проведений, що логічно, при виклику серверної процедури з боку клієнта.

Підсумуємо вище сказане:

  1. Процедури і функції з директивою "НаКліентеНаСервере" використовуються тільки в модулях команд і обмежені можливостями клієнтської сторони.
  2. Процедури і функції з директивою "НаКліентеНаСервереБезКонтекста" використовуються тільки в модулях форм і дозволяють працювати з серверної стороною без передачі контексту форми (реквізити форми, експортні змінні модуля форми і ін.).
  3. Основна відмінність між двома розглянутими директивами - це контекст їх застосування. Одна команда препроцесору використовується тільки в модулях команд, інша в модулях керованих форм.

За весь досвід роботи з керованими формами використовувати подібні процедури і функції доводилося дуже рідко. Як уже говорив вище, вважаю, що їх ісопльзованіе погіршує читабельність коду.