Глобальный модуль

> [HTML Version](globalmodule.html)

Глобальный модуль можно [создать через редактор скриптов](via-script-editor.md), выбрав в списке событий тип "Глобальный модуль":

_(./images/sc_event_types_2.png)_

Использование глобальных модулей позволяет сократить повторяющийся код в скриптах, улучшить читаемость кода и скорость компиляции скриптов проекта.

Код модуля по умолчанию выглядит так:

````
interface  
  
implementation  
  
end.

````


В области от ключевого слова "interface" до слова "implementation" размещается определение внешнего интерфейса модуля, т.е. определения, видимые извне (из других скриптов). В области от "implementation" до "end." размещается реализация интерфейса. Например, нам требуется объявить в модуле функцию, которая будет возвращать результат сложения двух целых чисел. Опишем эту функцию в области реализации (т.е. после "implementation"):

````
interface  
  
implementation  
  
// функция сложения двух чисел  
function mySum(A, B: Integer): Integer;  
begin  
  Result := A + B;  
end;  
  
end.

````


Функция описана, но использовать её из других скриптов мы не сможем, т.к. она не вынесена во внешний интерфейс модуля и сейчас является локальной функцией нашего модуля. Чтобы сделать её глобальной (видимой для всех скриптов), достаточно вынести заголовок функции в область интерфейса:

````
interface  
function mySum(A, B: Integer): Integer;  
  
implementation  
  
// функция сложения двух чисел  
function mySum(A, B: Integer): Integer;  
begin  
  Result := A + B;  
end;  
  
end.

````


Теперь мы можем использовать нашу глобальную функцию в любом скрипте проекта, например:

````
var  
  aNum1, aNum2, aSum: Integer;  
begin  
  aNum1 := 10;  
  aNum2 := 15;  
  aSum := mySum(aNum1, aNum2);  // в aSum запишется результат равный 25  
end.

````


Аналогично, в глобальных модулях можно объявлять глобальные переменные:

Важно\! Использование глобальных переменных является плохим тоном. Вместо этого рекомендуется создавать внутренние переменные через [редактор переменных](https://simple-scada.com/help/manual/variable-editor.html). В частности, не рекомендуется объявлять в глобальных модулях переменные строковых типов из-за особенностей их хранения в памяти.

````
interface  
  
var  
  // эта глобальная переменная будет доступна из всех скриптов  
  myGlobalVar: Integer;    
  
implementation  
  
end.
````