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

 

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

Максимальная ставка НДС (налога на добавленную стоимость) до 2004 года имела значение20%, с 2004 ставка стала равной 18%. Таким образом, если бы в программах проектов, где используется ставка, например, для расчетов мы раньше писали бы везде конкретную цифру "20", то при переходе на другую ставку нам бы пришлось искать все места в программах, где есть эта цифра и менять на другую - неудобно. А при наличие константы достаточно изменить значение только в ней и все расчеты будут выполняться уже с новым значением*.

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

Константы могут содержать и ссылки на наиболее часто используемые записи каких-либо справочников.

Если для вашей организации есть запись в справочнике Организации, в котором помимо вашей есть множество других, то для применения в различных документах, где требуется различные реквизиты вашей организации удобно создать константу, которая ссылается на запись вашей фирмы. Тогда значение любого реквизита (поля) можно будет "достать" простым обращением через поле такой константы.

_НашаОрг.Наименование (или _НашаОрг.РасчСчет), где _НашаОрг - это и есть константа, ссылающаяся на запись, в которой находятся реквизиты вашей организации.

Константы можно создавать различными путями.

Наиболее общий:
В контекстном меню Проекта есть пункт Создать
/Создать константу...
Константа создается в два приема. Вначале создается только наименование и тип константы. Если предполагается, что константа будет ссылаться на запись справочника, то там же указывается какой справочник будет использоваться.
А после создания такой константы необходимо установить значение, которое она будет содержать.
Для констант простого типа (строка, дата, число, логика) вводятся необходимые значения, а для констант-справочников выбирается одна из существующих записей из заданного при объявлении константы справочника.

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

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

"Экзотический" способ создания констант:
Создается справочник с необходимым количеством полей нужного типа. Добавляется одна единственная запись, в которой в поля вводятся значения, которые будут служить константами для дальнейшего применения.

Дальше можно сделать двояко:
1. Создать глобальную константу (меню Создать/Создать константу), которая будет ссылаться на эту единственную запись.
Тогда обращение к нужным константам в программах (функциях) будет происходить через квалификатор константы и через точку к нужному полю и, тем самым, его значению.
к примеру,

Стр := _констСправ.Строка1
.

2. Там где нужно значение из константного справочника, объявляется переменная этого справочника и применяется функция ПервоеЗначение(<переменная>). Так как запись в этом справочнике одна, то функция ПервоеЗначение "зарядит" в переменную эту единственную запись.

функция ХХХХХХХ
переменные справочник(КонстСправ) кстСправ;
начало
  ПервоеЗачение(кстСправ);
  Стр := кстСправ.Строка1;
  Чсл := кстСправ.Число4
конец


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

Запускается справочник, записи которого (как и обычно) отображаются в правом главном окне.
Отмечаются все записи, для которых необходимо создать константы (как отмечать записи в главной таблице справочника можно посмотреть в справочной системе - раздел "Окно справочника"). Из контекстного меню таблицы справочника вызывается пункт "Создать константу".
После этого появляется диалог с таблицей, в которой автоматически сгенерированы имена констант и их значения (ссылки на отмеченные записи).
Наименования констант в таблице диалога можно изменить (префикс и суффикс всех констант, наименование конкретной константы). Там же в диалоге выбирается раздел, в который создаваемые константы будет помещены.
Этот диалог отслеживает чтобы имена констант не совпадали (внизу слева выдается предупреждение, если обнаружены две или более константы с одним и тем же именем; так же при совпадении имен этот диалог не будет откликаться на кнопку "Верно").

 

  К содержанию
   
  * Пример примитивен и каждый разработчик знает об этом не понаслышке. Но не все так просто.
Не во всех приложениях учетного назначения можно вот так просто изменять значения глобальных констант.
Такое надругательство может привести к неприятным моментам. Например, пользователь исправил "старую" по времени создания запись, в которой применяется константа, а значение ее уже другое - измененное. Данные будут искажены.
В таких случаях применяют "историю" изменений констант, но это тема уже другого обсуждения.