КонстантаМенеджерЗначения.<Имя константы>

Типы · <Constant name>

Используется для доступа к константе. Выполняет получение (чтение) константы и ее установку (запись). В отличие от КонстантаМенеджер.<Имя константы> получение и установку выполняет в/из внутреннего свойства Значение. Любая запись константы (интерактивно в форме, объекты КонстантыНабор и КонстантаМенеджер.<Имя константы>) явно или неявно создает объект этого типа и производит запись с его помощью, что обеспечивает вызов обработчиков событий этого объекта.

Примеры платформы

СтавкаНДС = Константы.СтавкаНДС.СоздатьМенеджерЗначения();
СтавкаНДС.Прочитать();
Если СтавкаНДС.Значение = 20 Тогда
    СтавкаНДС.Значение = 18;
    СтавкаНДС.Записать();
КонецЕсли;
Полное описание, параметры и ограничения

КонстантаМенеджерЗначения.<Имя константы> (ConstantValueManager.<Constant name>)

КонстантаМенеджерЗначения.<Имя константы> (ConstantValueManager.<Constant name>)

Доступен, начиная с версии 8.0.

Свойства:
<Имя общего реквизита> (<Common attribute name>)
ДополнительныеСвойства (AdditionalProperties)
ЗаписьИсторииДанных (WriteDataHistory)
Значение (Value)
ОбменДанными (DataExchange)
ЭтотОбъект (ThisObject)

Методы:
Записать (Write)
Метаданные (Metadata)
ПроверитьЗаполнение (CheckFilling)
Прочитать (Read)
УстановитьКомментарийВерсииИсторииДанных (SetDataHistoryVersionComment)

События:
ОбработкаПроверкиЗаполнения (FillCheckProcessing)
ОбработкаФормированияПоВерсииИсторииДанных (GenerateFromDataHistoryVersionProcessing)
ПередЗаписью (BeforeWrite)
ПриЗаписи (OnWrite)

Описание:

Используется для доступа к константе. Выполняет получение (чтение) константы и ее установку (запись). В отличие от КонстантаМенеджер.<Имя константы> получение и установку выполняет в/из внутреннего свойства Значение. Любая запись константы (интерактивно в форме, объекты КонстантыНабор и КонстантаМенеджер.<Имя константы>) явно или неявно создает объект этого типа и производит запись с его помощью, что обеспечивает вызов обработчиков событий этого объекта.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Данный объект может быть сериализован в/из XML. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/enterprise/current-config}. Имя типа XDTO: ConstantValueManager.<Имя константы>.

Пример:

// чтение и запись константы

СтавкаНДС = Константы.СтавкаНДС.СоздатьМенеджерЗначения();
СтавкаНДС.Прочитать();
Если СтавкаНДС.Значение = 20 Тогда
СтавкаНДС.Значение = 18;
СтавкаНДС.Записать();
КонецЕсли;

См. также:
КонстантаМенеджер.<Имя константы>, метод СоздатьМенеджерЗначения
КонстантаМенеджерЗначения.<Имя константы>, свойство ЭтотОбъект

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Записать учебный лимит и восстановить его отменой транзакции

Показываем Установить и Записать менеджера только внутри собственной отменяемой транзакции. Рабочие настройки не используются.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Новая пустая файловая учебная база с именем корня конфигурации Учебная85. Не используйте константы рабочей УТ/КА2/УНФ/БП.

  2. Константы → Добавить: УчебныйЗаголовок (Строка длиной 100, Проверка заполнения Показывать ошибку) и УчебныйЛимит (Число 9,0, неотрицательное, Проверка заполнения Не проверять).

  3. Модули менеджеров значений констант и модули набора констант оставьте пустыми; внешние вызовы и подписки на записи не создавайте. Обновите конфигурацию базы данных.

  4. Вставьте фрагмент в тело серверной ВыполнитьПример() Экспорт. Каждую задачу запускайте отдельно в собственной учебной базе.

  5. Здесь выполняется настоящая временная запись в собственную учебную базу. Нужны пустые модули и отсутствие чужой транзакции; откат не отменяет внешние действия обработчиков.

Если Метаданные.Константы.Найти("УчебныйЗаголовок") = Неопределено
    Или Метаданные.Константы.Найти("УчебныйЛимит") = Неопределено Тогда
    ВызватьИсключение "Подготовьте две собственные учебные константы";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
    ВызватьИсключение "Нельзя отменять чужую транзакцию ради урока";
КонецЕсли;
СтарыйЛимит = Константы.УчебныйЛимит.Получить();
НачатьТранзакцию();
Попытка
    Константы.УчебныйЛимит.Установить(10);
    Сообщить(Константы.УчебныйЛимит.Получить() = 10);
    Менеджер = Константы.УчебныйЛимит.СоздатьМенеджерЗначения();
    Менеджер.Прочитать();
    Менеджер.Значение = 20;
    Менеджер.Записать();
    Сообщить(Константы.УчебныйЛимит.Получить() = 20);
    ОтменитьТранзакцию();
Исключение
    Если ТранзакцияАктивна() Тогда
        ОтменитьТранзакцию();
    КонецЕсли;
    ВызватьИсключение;
КонецПопытки;
Если Константы.УчебныйЛимит.Получить() <> СтарыйЛимит Тогда
    ВызватьИсключение "Восстановление учебного лимита не подтверждено";
КонецЕсли;
Сообщить("Старый учебный лимит восстановлен откатом.");

Разбор по шагам

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

  2. Установить записывает 10 непосредственно в базу внутри начатой транзакции.

  3. Менеджер значения читает 10, меняет его на 20 и Записать сохраняет новую версию внутри той же транзакции.

  4. Намеренно ОтменитьТранзакцию, а не ФиксироватьТранзакцию: обе правки исчезают.

  5. Новый Получить после отката сравниваем с исходным значением; не проверяем устаревшую переменную менеджера.

Как проверить результат

  1. Две проверки Истина внутри транзакции: сначала 10, затем 20.

  2. После завершения сообщение о восстановлении, значение базы точно равно прежнему.

Ожидаемый результат

Разница между двумя API записи константы и границами транзакции показана на своём учебном лимите.

На что обратить внимание

  1. Установить не является присваиванием только в памяти: этот вызов реально записывает константу.

  2. Файлы, письма и сетевые действия из обработчиков транзакция базы не откатывает.

  3. Данные в экземпляре менеджера после отката могут не отражать текущее состояние базы.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Изменить заголовок в менеджере константы, не сохраняя

МенеджерЗначения отделяет значение в памяти от значения базы. Повторное чтение возвращает сохранённое значение.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Новая пустая файловая учебная база с именем корня конфигурации Учебная85. Не используйте константы рабочей УТ/КА2/УНФ/БП.

  2. Константы → Добавить: УчебныйЗаголовок (Строка длиной 100, Проверка заполнения Показывать ошибку) и УчебныйЛимит (Число 9,0, неотрицательное, Проверка заполнения Не проверять).

  3. Модули менеджеров значений констант и модули набора констант оставьте пустыми; внешние вызовы и подписки на записи не создавайте. Обновите конфигурацию базы данных.

  4. Вставьте фрагмент в тело серверной ВыполнитьПример() Экспорт. Каждую задачу запускайте отдельно в собственной учебной базе.

Если Метаданные.Константы.Найти("УчебныйЗаголовок") = Неопределено
    Или Метаданные.Константы.Найти("УчебныйЛимит") = Неопределено Тогда
    ВызватьИсключение "Подготовьте две собственные учебные константы";
КонецЕсли;
Сохраненное = Константы.УчебныйЗаголовок.Получить();
Менеджер = Константы.УчебныйЗаголовок.СоздатьМенеджерЗначения();
Менеджер.Прочитать();
Сообщить(Менеджер.Значение = Сохраненное);
Менеджер.Значение = "Учебный заголовок только в памяти";
Менеджер.ДополнительныеСвойства.Вставить("Источник", "Учебная обработка");
Сообщить(Менеджер.ПроверитьЗаполнение());
Сообщить(Менеджер.Метаданные().Имя = "УчебныйЗаголовок");
Сообщить(Менеджер.ЭтотОбъект = Менеджер);
Сообщить(Константы.УчебныйЗаголовок.Получить() = Сохраненное);
Менеджер.Прочитать();
Сообщить(Менеджер.Значение = Сохраненное);
Сообщить("Записать не вызывался: заголовок базы сохранён.");

Разбор по шагам

  1. Получить читает сохранённую константу, а СоздатьМенеджерЗначения создаёт объект работы с ней.

  2. Прочитать загружает значение в свойство Значение менеджера.

  3. Присваивание Значение меняет только экземпляр. ДополнительныеСвойства хранит служебный контекст этого объекта.

  4. ПроверитьЗаполнение проверяет собственный непустой учебный заголовок, но не выполняет запись.

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

Как проверить результат

  1. Шесть проверок Истина.

  2. Сохранённый заголовок до/после одинаковый, новое учебное название в базу не попало.

Ожидаемый результат

Показан редактор значения константы в памяти и явное отбрасывание несохранённой правки.

На что обратить внимание

  1. Прочитать может потерять несохранённые изменения экземпляра; в уроке это сделано намеренно.

  2. ДополнительныеСвойства не становится новой константой и не сохраняется автоматически.

  3. Нельзя использовать этот код с заголовками рабочих организаций без отдельной задачи и проверки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.