Загальні модулі 1с

Різні контекст і загальні модулі

За допомогою властивостей загальних модулів і інструкцій препроцесора можна організувати виконання різних методів загальних модулів в потрібному контексті.
Кожна властивість загального модуля відповідає за можливість компіляції (і виконання) загального модуля в тому чи іншому контексті.
В наявності є таке властивості, що відповідають за контекст, в якому доступні методи загального модуля:
● Клієнт (звичайна програма) - методи загального модуля будуть доступні для товстого клієнта в режимі звичайного застосування;
● Клієнт (кероване додаток) - методи загального модуля будуть доступні для тонкого клієнта, веб-клієнта, а також для товстого клієнта в
режимі керованого застосування;
● Сервер - методи загального модуля будуть доступні на сервері;
● Зовнішнє з'єднання - методи загального модуля будуть доступні в зовнішньому з'єднанні.
Якщо встановлюються одночасно кілька властивостей, то це означає, що методи загального модуля будуть доступні в декількох контекстах.
Якщо у загального модуля встановлено властивість Сервер і ще якесь властивість, то це означає, що загальний модуль буде доступний одночасно на сервері і в обраному клієнта. При цьому необхідно розуміти, що фактично це буде кілька варіантів скомпільованої коду (по числу обраних клієнтів і власне для сервера).
При цьому якщо метод, розташований в такому загальному модулі, викликається з боку клієнта, то буде використана клієнтська копія загального модуля, а якщо з сервера - серверна. В цьому випадку за допомогою директив препроцесора (докладніше див. Тут) можна «захистити» сервер від того коду, який на ньому не може виконуватися.
Розглянемо приклад. Загалом модулі (який може виконуватися на тонкому клієнті і на сервері) є метод, який має кілька різну поведінку на стороні тонкого клієнта і на стороні сервера. Подивимося, як це можна зробити:

Процедура МетодОбщегоМодуля () Експорт
// Тут розміщується різний важливий код
# Якщо ТонкійКліент Тоді
// Покажемо попередження
ПоказатьОповещеніеПользователя ( "На клієнті");
# КонецЕсли
КонецПроцедури
Тоді на стороні сервера код придбає такий вигляд:
Процедура МетодОбщегоМодуля () Експорт
// Тут розміщується різний важливий код
КонецПроцедури
А на стороні тонкого клієнта код буде мати наступний вигляд:
Процедура МетодОбщегоМодуля () Експорт
// Тут розміщується різний важливий код
// Покажемо попередження
ПоказатьОповещеніеПользователя ( "На клієнті");
КонецПроцедури

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

Повторне використання значень, що повертаються

Якщо загальний модуль не є глобальним, то стає доступно властивість Повторне використання значень, що повертаються. Це властивість може набувати таких значень:
● Не використовуйте - повторне використання значень, що повертаються для функцій цього загального модуля не використовується.
● Під час дзвінка і На час сеансу - для загального модуля використовується метод визначення повторного використання даних. Суть цього методу полягає в тому, що в ході виконання коду система запам'ятовує параметри і результат роботи функцій після першого виклику функції. При повторному виклику функції з такими ж параметрами, відбувається повернення запомненного значення (з першого виклику) без виконання самої функції. Якщо функція під час свого виконання змінює значення параметрів, то повторний виклик функції не буде це робити.
Можна виділити наступні особливості збереження результатів виклику:
● якщо функція виконується на сервері і викликається з серверного коду, то значення параметрів і результат виклику запам'ятовуються для поточного сеансу на стороні сервера;
● якщо функція виконується на товстому або тонкому клієнті, то значення параметрів і результатів виклику запам'ятовуються на стороні клієнта;
● якщо функція виконується на стороні сервера, а викликається з клієнтського коду, то значення параметрів виклику запам'ятовуються і на стороні клієнта, і на стороні сервера (для поточного сеансу).
Збережені значення видаляються:
● якщо властивість встановлено в значення Під час дзвінка:
● на стороні сервера - при поверненні управління з сервера;
● на стороні клієнта - при завершенні роботи процедури або функції вбудованого мови верхнього рівня (викликаної системою з інтерфейсу, а не з іншої процедури або функції вбудованого мови);
● якщо властивість загального модуля встановлено в значення На час сеансу:
● на стороні сервера - при закінченні сеансу;
● на стороні клієнта - при закритті клієнтського додатку.
Збережені значення будуть видалені:
● на сервері, в товстому клієнті, в зовнішньому з'єднанні, в тонкому клієнті і в веб-клієнті зі звичайною швидкістю з'єднання - через 20 хвилин після обчислення зберігається значення або через 6 хвилин після останнього використання;
● в тонкому клієнті і веб-клієнта з низькою швидкістю з'єднання - через 20 хвилин після обчислення зберігається значення;
● при нестачі оперативної пам'яті в робочому процесі сервера;
● при перезапуску робочого процесу;
● при перемиканні клієнта на інший робочий процес.
Після видалення значень виклик функції, що експортується виконується як при першому виклику.
На виконання процедур ця властивість загальних модулів не впливає - процедури виконуються завжди.

Якщо у загального модуля властивість Повторне використання значень, що повертаються встановлено в значення На час сеансу. то в значеннях, що повертаються функціями такого модуля, не можна використовувати значення типу МенеджерВременнихТабліц.
Якщо функція загального модуля, з встановленим повторним використанням, викликаються з цього ж самого загального модуля (наприклад, з ім'ям ОбщійМодуль), то слід пам'ятати про наступну особливість: якщо функція викликається на ім'я МояФункція (). то виконання функції буде відбуватися при кожному виклику функції. Для того щоб використовувалися записані часові функція слід викликати по повному імені:
ОбщійМодуль.МояФункція ().
Метод глобального контексту ОбновітьПовторноІспользуемиеЗначенія () видаляє всі повторно використовувані значення, як на стороні сервера, так і на стороні клієнта, незалежно від місця виклику методу. Після виконання методу ОбновітьПовторноІспользуемиеЗначенія () перший виклик функції буде виконаний повністю.

Навігація по публікаціям

Схожі статті