Переменные

Переменная – это данное, значение которого может меняться в процессе выполнения программы. Переменные всегда имеют имена. Переменными в языке скриптов могут быть:

  • Глобальные переменные
  • Контекстные переменные
  • Локальные переменные

Глобальные переменные

Глобальный – общий, универсальный.

В Домино имеется набор переменных, доступных в любом месте проекта. Именно по причине их общей доступности такие переменные названы глобальными. Глобальным переменным можно свободно присваивать значения и использовать их в выражениях, функциях и процедурах, расположенных в любых библиотеках и Приложении.

Область видимости глобальной переменной может быть специально ограничена настройщиком проекта.

Обычно глобальные переменные задаются либо в библиотеке ‘Системная область’, раздел ‘Параметры’, папка ‘Глобальные переменные’, либо в библиотеке ‘!Базовый набор’, раздел ‘Параметры’, папка ‘Глобальные переменные’.

image-1648658927312.png

Объяснение предназначения каждой из этих переменных не является целью данного руководства, поэтому лишь замечу, что элементы проекта, описывающие глобальные переменные имеют иконки разного цвета. Цвет иконки зависит от статуса проектного элемента. Если проектировщик присвоил глобальной переменной статус ‘Экспортный (Публичный’), то отображается иконка зеленого цвета. Для непубличных переменных используется иконка синего цвета.

image-1648658947679.png

На данном рисунке в списке глобальных переменных из библиотеки ‘!Базовый набор’ находится подстановка переменной ’Текущее ЦФО’. Определение глобальной переменной ’Текущее ЦФО’ находится выше – в библиотеке ‘Системная область’, что видно на предыдущем рисунке. Подстановку глобальной переменной применяют для назначения переменной начального значения.

Для глобальной переменной могут быть заданы следующие атрибуты:

  • Начальное значение – присваивается при старте Домино. Если начальное значение не указано, то переменная имеет значение NULL.

При завершении работы Домино текущие значения глобальных переменных сохраняются в специальном файле (этот файл называют ‘профиль’). При последующем старте Домино глобальным переменным присваивают сохраненные в профиле значения. Значение из профиля имеет приоритет над значением, заданным в данном атрибуте.

  • Выражение – рассчитывается при старте Домино и результат присваивается глобальной переменной

Выражение рассчитывается после присваивания начального значения, указанного в предыдущем атрибуте, и после считывания значения из профиля. Т.е. если для глобальной переменной задан атрибут ‘Выражение’, то значение глобальной переменной при старте Домино всегда будет рассчитано как результат указанного выражения.

Некоторые функции и процедуры используют глобальные переменные как неявные входные и выходные параметры. Например, функции, расположенные в библиотеке ‘Системная область’, раздел ‘Параметры’, папка ‘Стандартные’, папка ‘Функции работы с датой’, папка ‘Начало/конец дня для глобальных дат’:

image-1648658969281.png

Другой пример использования глобальной переменной:

image-1648658984838.png

Функция для расчета курса получает дату из документа. UID требуемого документа считывается из глобальной переменной ‘Документ’.

 В следующем примере показано применение глобальной переменной в форме документа.

image-1648659002304.png

В форме описано специальное поле для глобальной переменной ‘Партнер для документа’. Это поле является скрытым, т.е. не отображается на экране. Для заполнения этого поля (и, следовательно, глобальной переменной) используется выражение, возвращающее значение предыдущего поля формы. Таким образом проектировщик копирует введенное значение контрагента документа в глобальную переменную. Далее можно использовать эту переменную в процедурах и функциях, вызываемых из формы.

Контекстные переменные

Контекст (от лат. Contextus - тесная связь, соединение) –законченный в смысловом отношении отрывок текста, необходимый для определения смысла входящего в него слова или фразы.

Замысел появления контекста в Домино заключался в том, чтобы с помощью контекста точнее понимать смысл действий программы в отношении обрабатываемых данных. Иными словами, проектировщик, анализируя контекст, понимает какие именно объекты обрабатываются в рассматриваемом  месте программы. Для того чтобы контекстом было удобно пользоваться, контекст должен содержать как можно меньше частей. Этого можно добиться, если для каждого объекта завести свою переменную, в которую записывать UID текущей записи объекта.

Контекст в Домино – набор значений специальных (контекстных) переменных, содержащих идентификаторы текущих записей основных объектов БД.

Контекстные переменные перечислены в библиотеке ‘Системная область’, раздел ‘Параметры’, папка ‘Контекстные переменные’.

image-1648659021421.png

Список содержит контекстные переменные по всем объектам.

В папке ‘Прочие’ находятся дополнительные контекстные переменные. Дополнительные контекстные переменные были созданы до того, как в Домино появились локальные переменные и формальные параметры. В настоящее время имеются более удобные и понятные средства для реализации тех задач, в которых могут потребоваться эти переменные, поэтому использование дополнительных контекстных переменных не рекомендуется.

Для контекстной переменной могут быть заданы следующие атрибуты:

  • Начальное значение – присваивается при старте Домино. Если начальное значение не указано, то переменная имеет значение NULL.
  • Выражение – рассчитывается при старте Домино и результат присваивается контекстной переменной. Выражение рассчитывается после присваивания начального значения.

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

Контекстным переменным отводится следующая роль.

  • Значения контекстных переменных (контекст) содержат идентификаторы текущих объектов БД.
  • Посредством контекстных переменных осуществляется доступ к параметрам текущих записей объектов. Например, конструкция <<Продукт>>.Имя определяет наименование продукта из текущей записи продукта.
  • В видах просмотра в контекстную переменную отображаемого объекта заносится идентификатор той строки, на которой находится курсор. Например, в виде просмотра партнеров заполняется переменная <<Партнер>>.
  • Некоторые функции и процедуры используют контекстные переменные в качестве неявных параметров. Такие процедуры называются контекстно-зависимыми.

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

Рассмотрим подробнее механизм формирования контекста.

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

При вызове компоненты (процедуры, функции, отчета), если это предусмотрено разработчиком компоненты, создается копия глобального контекста.  Такая копия называется локальным контекстом. Локальный контекст присоединяется к списку локальных переменных компоненты, и, таким образом, контекстные переменные становятся доступными внутри компоненты. Компонента работает только со своей (локальной) копией контекста и не может изменить контекст других компонент или глобальный контекст.

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

Пример использования контекстной переменной:

image-1648659040651.png

Обычно применяется следующая цепочка вызовов: вид просмотра документов –> форма документа –>  вид просмотра строк. При формировании заголовка  окна, содержащего вид просмотра строк, удобно использовать контекстную переменную <<Документ>>, поскольку эта переменная содержит UID именно того документа, строки которого отображаются.

Локальные переменные

Локальная переменная – переменная действующая только внутри процедуры, функции или выражения.

При описании процедуры (функции, выражения) можно указать необходимые локальные переменные в разделах ‘Локальные переменные’ или ‘Формальные параметры’. Здесь же задаются начальные значения переменных.

При запуске процедуры (функции, выражения) ядро программы создает указанные локальные переменные и присваивает им начальные значения. По завершении процедуры все локальные переменные удаляются.

Пример описания локальных переменных для процедуры:

image-1648659062645.png

Для процедуры указаны четыре локальные переменные. Две переменные расположены в разделе  для описания формальных параметров. Для одной переменной задано начальное значение.

Если локальные переменные расположены в разделе ‘Формальные параметры’, то это означает, что процедура имеет соответствующие параметры для вызова.

Значения формальных параметров, указанные при вызове процедуры, имеют приоритет над начальными значениями в описании. Т.е. при старте процедуры в локальную переменную (являющуюся формальным параметром) будет записано значение при вызове, а если таковое отсутствует, то будет записано начальное значение из описания.

image-1648659078129.png

Функция ‘День’ возвращает номер дня недели. При вызове функции требуется указать значение формального параметра ‘Дата’.

image-1648659095108.png

При вызове функции 'День' формальный параметр ‘Дата’ заполняется датой документа.