Константы в 1С

Создание констант

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

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

Важно понимать, что в 1С константы это не глобальные переменные, которые нельзя изменить в коде. Это некие значения, которые хранятся в базе данных. Их можно изменить как программно, так и интерактивно в пользовательском режиме.

В дереве метаданных константы находятся в разделе «Константы»:

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

Форма константы

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

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

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

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

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

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

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

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

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

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

Работа с константами из встроенного языка

Получение и изменение константы

//установим значение константы
Константы.НаименованиеОрганизации.Установить("тест");
 
//выведем на экран значение константы
Сообщить(Константы.НаименованиеОрганизации.Получить());
 
//можно через []
НаименованиеОрганизации = Константы["НаименованиеОрганизации"].Получить();

Перебор всех констант

Для Каждого Конст Из Константы Цикл
	//на каждом витке цикла будет новая константа
	Сообщить(Конст.Получить());	
КонецЦикла;

Набор констант

НК = Константы.СоздатьНабор();
НК.Прочитать(); //обязательно нужно прочитать, или все значения будут пустые
Сообщить(НК.НаименованиеОрганизации);
Сообщить(НК.ОсновнойСклад);
 
//можно использовать не все константы
НК = Константы.СоздатьНабор("НаименованиеОрганизации, ОсновнойСклад");
//в наборе будут только указанные константы  
НК.Прочитать();
НК.НаименованиеОрганизации = "тест";
НК.Записать();
//если попытаться изменить константу, которой нет в наборе будет ошибка

Менеджер значения

У константы есть Менеджер значения. Это аналог объекта у справочника и документа. Любая запись константы, хоть через менеджер, хоть через набор констант создает Менеджер значения и вызывает его обработчики (ПередЗаписью, ПриЗаписи).

У менеджера значения есть свойства ДополнительныеСвойства и ОбменДанными.

МЗ = Константы.НаименованиеОрганизации.СоздатьМенеджерЗначения();
МЗ.Прочитать();
МЗ.ДополнительныеСвойства.Вставить("Запись", Истина);
МЗ.Значение = "тест2";
МЗ.ОбменДанными.Загрузка = Истина;
МЗ.Записать();

Модули

У константы есть модуль менеджера и модуль менеджера значения. Модуль менеджера значения это аналог модуля объекта у справочника и документа. В нем есть события ОбработкаПроверкиЗаполнения, ПередЗаписью, ПриЗаписи. Во всех этих обработчиках есть параметр Отказ. Если его установить равным Истина, то константа не запишется в базу данных:

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	//первым вызывается событие ОбработкаПроверкиЗаполнения
	//еще до начала транзакции записи
КонецПроцедуры
 
Процедура ПередЗаписью(Отказ)
	//затем событие ПередЗаписью
	//уже в транзакции, но константа еще не записана
КонецПроцедуры
 
Процедура ПриЗаписи(Отказ)
	// После записи в базу, но до окончания транзакции 
	//вызывается событие ПриЗаписи
КонецПроцедуры

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями: