Загальні модулі Загальні модулі Виклик процедури загального модуля

Головна / Оптимізація роботи

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

Наприклад візьмемо нашу стару конфігурацію, яку я використав у попередніх статтях. У нас в ній є два документи – це Прихід Товару на склад та Відпуск товару на склад. В обох документах є процедури, які розраховують суму у рядку табличної частини.

У кожному документі написано той самий код для розрахунку суми.

Процедура МатеріалиЦінаПриЗміні(Елемент)
РядокТаблічноїЧастини = Елементи.Матеріали.ПоточніДані;
РядокТаблічноїЧасти.Сума = РядокТаблічноїЧасти.Кількість * РядокТаблічноїЧасти.Ціна;
КінецьПроцедури

Ось сьогодні перенесемо його в загальний модуль, а з документа викликатимемо його.

Створюємо загальний модуль для розрахунку суми

І так почнемо спочатку створити спільний модуль. Для цього заходимо в конфігуратор, шукаємо пункт Загальні модулі, клацаємо правою кнопкою і додаємо нові, пишемо ім'я Робота з документами. Вписуємо в нього наступний код.

Також обов'язково поставте у вікні властивостей галочки навпроти Клієнт (Керований додаток) і Сервер.

Тепер потрібно трохи змінити код у модулі форми документів. Зліва в конфігурації шукаємо документ Прихід товару розгортаємо вікна до вікна Форми кликаємо два рази на Форма Документу і у вікні форми, що відкрилося, знизу переходимо на вкладку Модуль. У нас є такий код

Ця процедура працює при зміні Кількості в табличній частині документа Прихід товару та підраховує суму.

&На Клієнті



КінецьПроцедури

А ця процедура починає працювати при зміні Ціни в табличній частині документа. Прихід товару та розраховує суму.

&На Клієнті

РядокТаблічноїЧастини = Елементи.Матеріали.ПоточніДані;
РядокТаблічноїЧасти.Сума = РядокТаблічноїЧасти.Кількість * РядокТаблічноїЧасти.Ціна;
КінецьПроцедури

Замінюємо його на цей

&На Клієнті
Процедура МатеріалиКількістьПриЗміні(Елемент)
РядокТаблічноїЧастини = Елементи.Матеріали.ПоточніДані;

КінецьПроцедури
&На Клієнті
Процедура МатеріалиЦінаПриЗміні(Елемент)
РядокТаблічноїЧастини = Елементи.Матеріали.ПоточніДані;
Робота з документами. Розрахувати Суму (Рядок Табличної Частини);
КінецьПроцедури

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

Теж саме робимо для документа Відпуск товару зі складу, запускаємо та перевіряємо працездатність коду. Ось ми з вами і зробили перший загальний модуль, сподіваюся комусь знадобиться моя стаття.

На загальних модулях лежить обов'язок зберігання процедур та функцій, що викликаються з інших місць системи 1С. Вважається хорошим тоном розміщення коду, що викликається кілька разів, у процедурі загального модуля. Це універсально всім конфігурацій, тому будь-який розробник 1С повинен вміти працювати з цими об'єктами конфігурації. Для цього потрібно розуміти всі нюанси та вміти правильно використовувати надані платформою можливості.

Створення загального модуля в 1С

Після створення функції одному з модулів об'єкта виникла потреба використовувати аналогічний алгоритм іншому місці. Найправильніше, що можна тут зробити – перенести код до загального модуля, але перед цим необхідно створити його. Щоб це зробити, нам потрібно зайти до конфігуратора та в дереві конфігурації знайти вкладку «Загальні». Потім виділити «Загальні модулі» та скористатися кнопкою у вигляді білого плюса на зеленому кружку.

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

  • "Глобальний". Даний прапор ставиться, якщо модуль призначений для зберігання процедур та функцій, які мають викликатись без вказівки імені модуля. Звичайно, вони мають бути експортними, а їхні імена є унікальними в розрізі всього глобального контексту. За використанням вони не відрізнятимуться від стандартних функцій платформи;
  • "Клієнт". Залежить від налаштувань системи та регламентує, чи можуть процедури модуля виконуватися на стороні клієнта;
  • "Сервер". Позначаються загальні модулі, у яких планується поміщати алгоритми до виконання на сервері;
  • "Зовнішнє з'єднання". Процедури модуля з активацією цієї властивості зможуть виконувати через підключення зовнішнього джерела;
  • "Виклик сервера". Відповідає за дозволи процедур з модуля викликати сервер, виконуючись на клієнті;
  • "Привілейований". Активація цього налаштування дозволить під час роботи коду процедур модуля не перевіряти права доступу. Викликати спільний модуль з таким налаштуванням можна лише на сервері. Налаштування «Клієнт» та «Зовнішнє з'єднання» будуть скинуті;
  • "Повторне використання". Може приймати значення: "Не використовувати", "На час сеансу", "На час дзвінка". При багаторазовому виклику однієї процедури система може використовувати раніше розраховані дані в рамках процедури (виклик) або життя всього сеансу (запуску 1С). Варто бути дуже обережним із цим налаштуванням, оскільки через неправильне використання таких модулів можуть виникати помилки.

Бувають ситуації, коли потрібно створити спільний модуль із викликами процедури на сервері та клієнта з відмінностями в алгоритмі. Для розмежування коду використовують директиви препроцесора з перевіркою. В результаті для серверного дзвінка це буде один код, а для клієнтського – інший.
Процедура АлгоритмСерверКлієнт() Експорт #Якщо ТонкийКлієнт Тоді // код виконується, якщо виклик процедури прийшов з клієнта ПоказатиОповідьКористувача("На клієнті"); Інакше Якщо Сервер Тоді // код виконується, якщо виклик процедури прийшов з сервера Змінна Сервер = "Серверний виклик"; #КінецьЯкщо КінецьПроцедури

Приклад перенесення коду у загальний модуль 1С

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

&НаКлієнті Процедура ТовариЦінаПриЗміні(Елемент) ПерерахунокСуми(); КінецьПроцедури &НаКлієнті Процедура ТовариКількістьПриЗміні(Елемент) ПерерахунокСуми(); КінецьПроцедури &НаКлієнті Процедура ПерерахунокСуми() РядокТЧ = Елементи.Товари.ПоточніДані; СтрокаТЧ.Сума = СтрокаТЧ.Кількість * СтрокаТЧ.Ціна; КінецьПроцедури

Так як для нашого завдання нам вистачає виклику з клієнта та не потрібні дані з бази, ставимо лише прапор «Клієнт». Якщо ви хочете надалі використовувати цей модуль для більш складних розрахунків, то відзначте у властивостях ще й «Сервер». Підготовчий етап завершено і можемо переходити до написання коду.


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


Процедура РозрахуватиРядок(РядокТаблічноїЧастини) Експорт РядокТабличноїЧастини.Сума = РядокТабличноїЧастини.Кількість * РядокТабличноїЧастини.Ціна; КінецьПроцедури

Фрагмент 1

&НаКлієнті Процедура ТовариЦінаПриЗміні(Елемент) //виклик процедури із загального модуля РозрахункиВСистемі.РозрахуватиСтроку(Елементи.Товари.ПоточніДані); //ПерерахунокСуми(); КінецьПроцедури &НаКлієнті Процедура ТовариКількістьПриЗміні(Елемент) //виклик процедури із загального модуля РозрахункиВСистемі.РозрахуватиСтроку(Елементи.Товари.ПоточніДані); //ПерерахунокСуми(); КінецьПроцедури &НаКлієнті Процедура ПерерахунокСуми() РядокТЧ = Елементи.Товари.ПоточніДані; СтрокаТЧ.Сума = СтрокаТЧ.Кількість * СтрокаТЧ.Ціна; КінецьПроцедури

Фрагмент 2

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

При розробці загальних модулів слід враховувати загальноприйняті правила щодо їх створення:

  • Поміщати в окремий загальний модуль процедури та функції, що належать до подібного функціоналу;
  • У найменуванні модуля відображати його приналежність до контексту (Клієнт, Сервер) та уникати загальних слів (обробники, процедури тощо);
  • Розділяти внутрішню серверну логіку програми та клієнтську для інтерфейсу;
  • Будьте уважними, створюючи глобальний загальний модуль. Відсутність необхідності звертатися до процедури через ім'я модуля може призвести до плутанини, особливо якщо систему підтримує кілька груп розробників.

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

Загальні модулі 1С- Об'єкт метаданих конфігурації 1С 8.3 і 8.2, який зберігає в собі програмний код, який часто викликається в конфігурації. Функцію/процедуру можна викликати з будь-якого конфігураційного місця (якщо вона експортна).

Як використовувати загальний модуль

Хороший тон - помістити процедуру або функцію в загальний модуль, якщо вона викликається в одному місці. По-перше, якщо процедура коригується, її треба правити лише одному місці. По-друге, цим досягається більший порядок у коді.

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

Властивості загальних модулів

Одна з основних особливостей загальних модулів від інших модулів — не можна оголошувати спільні змінні.

Отримайте 267 відеоуроків з 1С безкоштовно:

Розглянемо докладніше палітру властивостей загального модуля:

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

Якщо Ви починаєте вивчати програмування 1С, рекомендуємо наш безкоштовний курс (не забудьте

Модулі платформи 1С:Підприємство 8.3, 8.2

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

Функції, які оголошені з прапором "експорт" у такому модулі, можна викликати з будь-яких конфігураційних місць. Виклик здійснюється через Ім'яСпільногоМодуля.Ім'яФункції().

У таких модулях немає розділу змінних.

Виконання загальних модулів залежить від виставлених параметрів у властивостях:

Підкреслити "Глобальний"

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

Прапор "Сервер"

Функції такого модуля можуть виконуватись на сервері.

Прапор "Клієнт (звичайний додаток)"

Функції такого модуля можуть виконуватись на клієнті в режимі звичайної програми.

Підкреслити "Клієнт (керований додаток)"

Функції такого модуля можуть виконуватися на клієнті в режимі керованої програми.

Прапор "Виклик сервера"

Прапор доступний для модулів із встановленим прапором "Сервер". Дозволяє виклик на клієнті експортних функцій цього модуля (які виконуватимуться на сервері).

Підкреслити "Зовнішнє з'єднання"

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

Прапор "Привілейований"

У модулі з таким прапором буде вимкнено перевірку прав. Підходить для підвищення продуктивності або дій щодо адміністрування.

Параметр "Повторне використання"

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

Модуль програми

Призначений для обробки подій запуску та завершення програми. Буває двох видів: для звичайного та керованого додатків.

Не слід перевантажувати його, оскільки це впливає на час запуску програми.

Модуль сеансу

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

Використовувати його слід обережно, оскільки модуль може виконуватися кілька разів, і навіть виконуватися без подальшого запуску бази. Виконується до модулів програми.

З повагою, (викладач та розробник).

Друк (Ctrl+P)

Об'єкти, розташовані в гілки дерева конфігурації Загальні модулі, призначені для розміщення текстів функцій і процедур, які можуть викликатися з будь-якого іншого модуля конфігурації.
УВАГА! Загальний модуль може містити лише визначення процедур та функцій.
Процедури та функції загального модуля, для яких у заголовках зазначено ключове слово Експорт, є одними із складових частин глобального контексту. Докладніше про написання процедур у загальному модулі можна дізнатися у розділах «Формат вихідних текстів програмних модулів» та «Оператори» довідки з вбудованої мови.
Для редагування загального модуля необхідно на панелі властивостей об'єкта типу Загальні модулі вікна Конфігурація у властивості Модуль клацнути мишею посилання Відкрити. Текст загального модуля буде видано для редагування в редакторі текстів системи «1С:Підприємство» як редагування тексту програмного модуля.
Загальний модуль, як частина конфігурації, зберігається лише у складі конфігурації.
Властивість Глобальний визначає, чи експортовані методи загального модуля є частиною глобального контексту.
Якщо властивість Глобальний встановлено значення Істина, то експортовані методи загального модуля доступні як методи глобального контексту.
Якщо властивість Глобальний встановлено на значення Брехня, то у глобальному контексті створюється властивість з ім'ям, що відповідає імені загального модуля метаданих. Ця властивість доступна тільки для читання. Значенням цієї властивості є об'єкт Загальний Модуль. Через цей об'єкт доступні експортовані методи загального модуля. Таким чином, звернення до методів неглобальних загальних модулів виглядає як XXXXX.YYYYY, де XXXXX – це ім'я властивості, що відповідає контексту загального модуля, а YYYYY – ім'я методу загального модуля, що експортується.
Приклад:

РоботаСторговимОбладнанням.ПідключитиСканерШтрихкод();

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

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



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

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

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

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

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

Якщо у загального модуля встановлено повторне використання значень, що повертаються, то на типи параметрів експортованих функції накладається ряд обмежень. Типи параметрів можуть бути лише:
● Примітивними типами ( Невизначено, NULL, Бульово, Число, Рядок, Дата).
● Будь-якими посиланнями на об'єкти бази даних.
● Структури зі значеннями властивостей вищезгаданих типів. І тут ідентичність параметрів контролюється «за вмістом» структур.
Якщо функція, що експортується, повертає будь-який об'єкт, то фактично повертається посилання на об'єкт, що зберігається в кеші. Якщо після отримання цього посилання відбудеться зміна стану об'єкта, то наступний виклик тієї ж функції призведе до повернення посилання на вже змінений об'єкт без фактичного виконання функції. Така поведінка спостерігатиметься до видалення збереженого значення (з будь-якої причини). Іншими словами – зміна стану об'єкта, отриманого в результаті виклику функції із загального модуля з повторним використанням значень, що повертаються, не є підставою для фактичного виклику функції. Також слід пам'ятати, що кеш об'єктів, що повертаються, індиферентний до
станом привілейованого режиму в момент виклику функції з повторним використанням значень, що повертаються. Ця особливість може призвести до наступної особливості поведінки:
● Фактичне виконання виклику функції з повторним використанням значень, що повертаються (перший виклик), здійснювалося при увімкненому привілейованому режимі.
● Під час виконання функції було отримано об'єкт, який не може бути отриманий з вимкненим режимом.
● Наступні дзвінки функцій виконували без встановлення режиму навігування.
● Однак, до моменту очищення кешу об'єктів, що повертаються або повторного фактичного виклику, функція повертатиме формально недоступний об'єкт.
● Також правильна та зворотна поведінка, коли перший виклик виконується без встановлення велігованого режиму, а в велетеному режимі не повертається об'єкт, який міг бути отриманий у велігованого режимі.

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

© 2023 androidas.ru - Все про Android