Диапазон

Типы · Range

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

Полное описание, параметры и ограничения

Диапазон (Range)

Диапазон (Range)

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

Свойства:
Конец (End)
Начало (Begin)

Конструкторы:
По описанию диапазона

Описание:

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

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

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

Сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером. Сериализуется.

См. также:
Глобальный контекст

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

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

Описание изменено в версии 8.3.20.

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

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

Проверить уровни и границы журнала без изменения его хранения

Читаем существующие настройки и диапазон дат. Отключённая регистрация новых событий не обязательно означает отсутствие ранее сохранённых событий.

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

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

Подготовка

  1. Создайте НОВУЮ отдельную пустую файловую базу на 8.5.1.1343. Корневое имя конфигурации УчебныйЖурнал85. Рабочий журнал УТ/КА2/УНФ/БП не используйте.

  2. Запускайте серверный ВыполнитьПример() Экспорт собственного учебного модуля с правом просмотра журнала. Для уроков записи в настройках журнала собственной базы должен быть разрешён уровень Информация.

  3. Фрагмент вставьте в тело процедуры; каждый урок запускайте отдельно. Код НЕ включает регистрацию автоматически и НЕ меняет настройки журнала.

  4. Уроки с ЗаписьЖурналаРегистрации оставляют собственные события в журнале учебной базы. Это реальная диагностическая запись, не запись прикладного документа. Очистка/сокращение журнала не выполняются.

  5. В тексты/Данные не добавляйте токены, пароли, персональные сведения или полные ответы сервисов. Выгрузка ограничена собственным случайным именем события и безопасными колонками, XML-файл не создаётся.

Уровни = ПолучитьИспользованиеЖурналаРегистрации();
Сообщить("Разрешённых уровней: " + Строка(Уровни.Количество()));
Для Каждого Уровень Из Уровни Цикл
    Сообщить("Уровень: " + Строка(Уровень));
КонецЦикла;
ПериодЖурнала = ПолучитьПериодЖурналаРегистрации();
Если ПериодЖурнала.Начало = Неопределено И ПериодЖурнала.Конец = Неопределено Тогда
    Сообщить("Журнал не содержит событий");
Иначе
    Если ПериодЖурнала.Начало = Неопределено Или ПериодЖурнала.Конец = Неопределено Тогда
        ВызватьИсключение "Получен неполный диапазон журнала";
    КонецЕсли;
    Сообщить(ПериодЖурнала.Начало <= ПериодЖурнала.Конец);
    Сообщить("Самое старое событие: " + Формат(ПериодЖурнала.Начало, "ДФ=yyyy-MM-dd HH:mm:ss"));
    Сообщить("Самое новое событие: " + Формат(ПериодЖурнала.Конец, "ДФ=yyyy-MM-dd HH:mm:ss"));
КонецЕсли;
Сообщить("Период разделения хранения: " + Строка(ПолучитьПериодРазделенияХраненияДанныхЖурналаРегистрации()));

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

  1. Количество уровней относится к разрешённой регистрации, не к количеству событий.

  2. ПолучитьПериодЖурналаРегистрации возвращает Диапазон. Две границы Неопределено означают пустой журнал.

  3. До форматирования/сравнения проверяем обе границы. Непустой диапазон относится к уже сохранённым событиям.

  4. Период разделения хранения показывает фактическую политику, не архивирует и не сокращает журнал.

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

  1. При непустом журнале проверка Начало <= Конец даёт Истина; иначе выводится сообщение об отсутствии событий.

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

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

Разделены настройки регистрации, наличие истории и политика разделения хранения.

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

  1. Журнал может содержать служебные события запуска даже в новой базе.

  2. Диапазон дат не является доказательством полноты бизнес-аудита.

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

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

Ограничить описание блокировки ключом и периодом

Для одного собственного ключа добавляем диапазон дат 15 сентября 2026. Не объявляем это доказательством бизнес-защиты или блокировки ровно N строк.

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

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

Подготовка

  1. Только собственная пустая УчебнаяКонфигурацияСинтаксиса. Создайте независимый регистр сведений УчебныеРезервы, периодичность В пределах секунды, измерение КлючРезерва типа Строка длиной 50 и ресурс Количество типа Число. Записи регистра для уроков не нужны.

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

  3. Вызывайте из собственной учебной обработки вне уже открытой транзакции. Не проводите рабочие документы, не запускайте в КА2/УНФ/УТ и не меняйте их режим блокировок ради опыта.

  4. Первый урок только создаёт описание. Остальные реально устанавливают краткую управляемую блокировку в собственной транзакции и затем отменяют её. Данные не записываются и не удаляются.

Если ТранзакцияАктивна() Тогда
    ВызватьИсключение "Запускайте отдельно, вне чужой транзакции";
КонецЕсли;
Схема = Метаданные.РегистрыСведений.Найти("УчебныеРезервы");
Если Схема = Неопределено Тогда
    ВызватьИсключение "Создайте собственный учебный регистр УчебныеРезервы";
КонецЕсли;
Если Схема.Измерения.Найти("КлючРезерва") = Неопределено Тогда
    ВызватьИсключение "Нет измерения КлючРезерва";
КонецЕсли;
НачалоДня = Дата(2026, 9, 15, 0, 0, 0);
КонецДня = Дата(2026, 9, 15, 23, 59, 59);
Интервал = Новый Диапазон(НачалоДня, КонецДня);
Сообщить(Интервал.Начало = НачалоДня);
Сообщить(Интервал.Конец = КонецДня);
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрСведений.УчебныеРезервы");
Элемент.Режим = РежимБлокировкиДанных.Исключительный;
Элемент.УстановитьЗначение("КлючРезерва", "guide-book");
Элемент.УстановитьЗначение("Период", Интервал);
Для Каждого Поле Из Элемент.Поля Цикл
    Если ТипЗнч(Поле.Значение) = Тип("Диапазон") Тогда
        Сообщить("Диапазон поля: " + Строка(Поле.Поле));
        Сообщить(Поле.Значение.Начало = НачалоДня);
        Сообщить(Поле.Значение.Конец = КонецДня);
    КонецЕсли;
КонецЦикла;
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
Попытка
    Блокировка.Заблокировать();
    Сообщить("Собственная управляемая блокировка установлена; данные не записывались");
    ОтменитьТранзакцию();
Исключение
    Если ТранзакцияАктивна() Тогда
        ОтменитьТранзакцию();
    КонецЕсли;
    ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());

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

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

  2. Диапазон создаётся с однотипными датами и верхней границей не меньше нижней. Границы только для чтения; для другого интервала создаётся другой объект.

  3. УстановитьЗначение задаёт два поля: КлючРезерва и Период. Нельзя считать, что одно поле автоматически ограничивает другое.

  4. Читаем тип Значение прежде, чем обращаться к Начало/Конец. Строковый ключ не является Диапазон.

  5. Проверки относятся к описанию условий. Из них нельзя получить число существующих записей, физические блокировки СУБД или доказательство правильности рабочего алгоритма.

  6. Установка проходит в своей транзакции, после чего она отменяется. Конкурентное поведение границ требует отдельного теста на учебной копии.

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

  1. Границы собственного диапазона совпадают с указанным днём; в паспорте присутствует диапазон Период и отдельный ключ guide-book.

  2. После завершения нет активной транзакции и нет новых/изменённых записей регистра.

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

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

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

  1. Не распространяйте пример Период на непериодический регистр или на другой тип пространства.

  2. Успешный вызов без второго сеанса не является доказанным тестом взаимного исключения.

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

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

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

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

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