Показываем Установить и Записать менеджера только внутри собственной отменяемой транзакции. Рабочие настройки не используются.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Новая пустая файловая учебная база с именем корня конфигурации Учебная85. Не используйте константы рабочей УТ/КА2/УНФ/БП.
Константы → Добавить: УчебныйЗаголовок (Строка длиной 100, Проверка заполнения Показывать ошибку) и УчебныйЛимит (Число 9,0, неотрицательное, Проверка заполнения Не проверять).
Модули менеджеров значений констант и модули набора констант оставьте пустыми; внешние вызовы и подписки на записи не создавайте. Обновите конфигурацию базы данных.
Вставьте фрагмент в тело серверной ВыполнитьПример() Экспорт. Каждую задачу запускайте отдельно в собственной учебной базе.
Здесь выполняется настоящая временная запись в собственную учебную базу. Нужны пустые модули и отсутствие чужой транзакции; откат не отменяет внешние действия обработчиков.
Если Метаданные.Константы.Найти("УчебныйЗаголовок") = Неопределено
Или Метаданные.Константы.Найти("УчебныйЛимит") = Неопределено Тогда
ВызватьИсключение "Подготовьте две собственные учебные константы";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Нельзя отменять чужую транзакцию ради урока";
КонецЕсли;
СтарыйЛимит = Константы.УчебныйЛимит.Получить();
НачатьТранзакцию();
Попытка
Константы.УчебныйЛимит.Установить(10);
Сообщить(Константы.УчебныйЛимит.Получить() = 10);
Менеджер = Константы.УчебныйЛимит.СоздатьМенеджерЗначения();
Менеджер.Прочитать();
Менеджер.Значение = 20;
Менеджер.Записать();
Сообщить(Константы.УчебныйЛимит.Получить() = 20);
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Если Константы.УчебныйЛимит.Получить() <> СтарыйЛимит Тогда
ВызватьИсключение "Восстановление учебного лимита не подтверждено";
КонецЕсли;
Сообщить("Старый учебный лимит восстановлен откатом.");Разбор по шагам
До записи сохраняем значение своей константы и запрещаем вложение в чужую активную транзакцию.
Установить записывает 10 непосредственно в базу внутри начатой транзакции.
Менеджер значения читает 10, меняет его на 20 и Записать сохраняет новую версию внутри той же транзакции.
Намеренно ОтменитьТранзакцию, а не ФиксироватьТранзакцию: обе правки исчезают.
Новый Получить после отката сравниваем с исходным значением; не проверяем устаревшую переменную менеджера.
Как проверить результат
Две проверки Истина внутри транзакции: сначала 10, затем 20.
После завершения сообщение о восстановлении, значение базы точно равно прежнему.
Ожидаемый результат
Разница между двумя API записи константы и границами транзакции показана на своём учебном лимите.
На что обратить внимание
Установить не является присваиванием только в памяти: этот вызов реально записывает константу.
Файлы, письма и сетевые действия из обработчиков транзакция базы не откатывает.
Данные в экземпляре менеджера после отката могут не отражать текущее состояние базы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.