Создание констант
Константы в 1С используются для хранения условно-постоянной информации. То есть это те значения, которые редко меняются. Например, основная организация, валюта регламентированного учета, дата начала применения какого-нибудь приказа и т.п.
Одна константа может хранить только одно значение. Типы могут быть как примитивными, так и ссылками на другие объекты базы данных.
Важно понимать, что в 1С константы это не глобальные переменные, которые нельзя изменить в коде. Это некие значения, которые хранятся в базе данных. Их можно изменить как программно, так и интерактивно в пользовательском режиме.
В дереве метаданных константы находятся в разделе «Константы»:

В свойствах константы нужно указать тип. Составной тип тоже можно:

Форма константы
Для константы можно не создавать форму, тогда она будет сгенерирована платформой автоматически, «на лету». Но чтобы в пользовательском режиме был доступ к константе, нужно в свойствах установить галку «Использовать стандартные команды«:

Тогда в пользовательском режиме, в той подсистеме, к которой относится константа, в разделе «Сервис» появится команда для открытия формы константы:

Так выглядит снегерированная платформой форма константы:

При необходимости можно переопределить форму для константы. Для этого предназначено свойство «Основная форма«:

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

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

При создании общей формы можно выбрать тип формы «Форма констант», тогда будет создана общая форма со всеми константами из конфигурации:

Справа есть основной реквизит формы «НаборКонстант», откуда можно перетягивать константы мышкой на форму:

Чтобы доступ к форме констант был в пользовательском режиме нужно в свойствах формы установить галку «Использовать стандартные команды»:

При необходимости, доступ к константам можно получить через меню «Все функции»:

Работа с константами из встроенного языка
Получение и изменение константы
1 2 3 4 5 6 7 8 |
//установим значение константы Константы.НаименованиеОрганизации.Установить("тест"); //выведем на экран значение константы Сообщить(Константы.НаименованиеОрганизации.Получить()); //можно через [] НаименованиеОрганизации = Константы["НаименованиеОрганизации"].Получить(); |
Перебор всех констант
1 2 3 4 |
Для Каждого Конст Из Константы Цикл //на каждом витке цикла будет новая константа Сообщить(Конст.Получить()); КонецЦикла; |
Набор констант
1 2 3 4 5 6 7 8 9 10 11 12 |
НК = Константы.СоздатьНабор(); НК.Прочитать(); //обязательно нужно прочитать, или все значения будут пустые Сообщить(НК.НаименованиеОрганизации); Сообщить(НК.ОсновнойСклад); //можно использовать не все константы НК = Константы.СоздатьНабор("НаименованиеОрганизации, ОсновнойСклад"); //в наборе будут только указанные константы НК.Прочитать(); НК.НаименованиеОрганизации = "тест"; НК.Записать(); //если попытаться изменить константу, которой нет в наборе будет ошибка |
Менеджер значения
У константы есть Менеджер значения. Это аналог объекта у справочника и документа. Любая запись константы, хоть через менеджер, хоть через набор констант создает Менеджер значения и вызывает его обработчики (ПередЗаписью, ПриЗаписи).
У менеджера значения есть свойства ДополнительныеСвойства и ОбменДанными.
1 2 3 4 5 6 |
МЗ = Константы.НаименованиеОрганизации.СоздатьМенеджерЗначения(); МЗ.Прочитать(); МЗ.ДополнительныеСвойства.Вставить("Запись", Истина); МЗ.Значение = "тест2"; МЗ.ОбменДанными.Загрузка = Истина; МЗ.Записать(); |
Модули
У константы есть модуль менеджера и модуль менеджера значения. Модуль менеджера значения это аналог модуля объекта у справочника и документа. В нем есть события ОбработкаПроверкиЗаполнения, ПередЗаписью, ПриЗаписи. Во всех этих обработчиках есть параметр Отказ. Если его установить равным Истина, то константа не запишется в базу данных:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) //первым вызывается событие ОбработкаПроверкиЗаполнения //еще до начала транзакции записи КонецПроцедуры Процедура ПередЗаписью(Отказ) //затем событие ПередЗаписью //уже в транзакции, но константа еще не записана КонецПроцедуры Процедура ПриЗаписи(Отказ) // После записи в базу, но до окончания транзакции //вызывается событие ПриЗаписи КонецПроцедуры |