← Назад к вопросам

Значения каких типов можно передавать в параметр "период" виртуальной таблицы регистра сведений?

1.8 Middle🔥 241 комментариев
#Объекты метаданных#Регистры

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Параметр Период в регистрах сведений

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

Основное отличие

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

Поддерживаемые типы Период

1. Дата (Date)

  • Получить значение на конкретную дату
  • Основной способ работы
  • Возвращает актуальное значение на эту дату
Запрос = Новый Запрос("ВЫБРАТЬ
|    Срез.Валюта,
|    Срез.Курс
|ИЗ
|    РегистрСведений.КурсыВалют.СрезПоследних(@Дата) как Срез");

Запрос.УстановитьПараметр("Дата", Дата(20250101));
Результат = Запрос.Выполнить();

2. Период (не конкретное значение)

  • Пустое значение Неопределено
  • Получает все записи за все времена
  • Показывает полную историю
Запрос = Новый Запрос("ВЫБРАТЬ
|    Срез.Валюта,
|    Срез.Дата,
|    Срез.Курс
|ИЗ
|    РегистрСведений.КурсыВалют.СрезПоследних(Неопределено) как Срез");

Результат = Запрос.Выполнить();

Виртуальные таблицы регистров сведений

СрезПоследних (Latest Slice):

  • Получает последнее значение на дату
  • Для многомерных регистров
  • Возвращает одну запись на комбинацию измерений
Процедура ПолучитьПоследнийКурс(Валюта, ДатаСреза)
    Запрос = Новый Запрос("ВЫБРАТЬ
    |    Срез.Курс
    |ИЗ
    |    РегистрСведений.КурсыВалют.СрезПоследних(@Дата) как Срез
    |ГДЕ
    |    Срез.Валюта = @Валюта");
    
    Запрос.УстановитьПараметр("Дата", ДатаСреза);
    Запрос.УстановитьПараметр("Валюта", Валюта);
    
    Результат = Запрос.Выполнить();
КонецПроцедуры;

СрезВремени (Time Slice):

  • Срез в конкретный момент времени
  • Получает значения на определённый день
  • Показывает ту информацию, которая была актуальна
Процедура ПолучитьСрезПоПериоду(НачалоПериода, КонецПериода)
    Запрос = Новый Запрос("ВЫБРАТЬ
    |    Срез.Коэффициент,
    |    Срез.Значение
    |ИЗ
    |    РегистрСведений.КоэффициентыБух.СрезПоследних(@Дата) как Срез
    |ГДЕ
    |    Срез.Дата >= @НачалоПериода
    |    И Срез.Дата <= @КонецПериода");
    
    Запрос.УстановитьПараметр("Дата", КонецПериода);
    Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
    Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
    
    Результат = Запрос.Выполнить();
КонецПроцедуры;

Отличие от регистров накопления

Регистр сведений:

  • Хранит ТЕКУЩЕЕ значение
  • При обновлении старое значение перезаписывается
  • История зависит от конфигурации (Периодичность)
  • Параметр Период для получения исторических значений

Регистр накопления:

  • Хранит ДВИЖЕНИЯ (приходы/расходы)
  • Остатки вычисляются из движений
  • Вся история автоматически сохраняется
  • Параметр Период для среза на конкретную дату

Механизм истории в сведениях

Регистр.КурсыВалют

Дата         | Валюта | Курс
2025-01-01   | USD    | 100
2025-01-05   | USD    | 105  <- новая запись, старая не удаляется
2025-01-10   | USD    | 98

Условие Периодичность = "День" → вся история сохраняется

Примеры использования

Получить текущий курс:

Стек = РегистрыСведений.КурсыВалют.СрезПоследних(ТекущаяДата());
Текстура = Срез.ПолучитьПервуюСтроку();
ТекущийКурс = Срез.Курс;

Получить всю историю курсов:

Запрос = Новый Запрос("ВЫБРАТЬ
|    Срез.Дата,
|    Срез.Валюта,
|    Срез.Курс
|ИЗ
|    РегистрСведений.КурсыВалют.СрезПоследних(Неопределено) как Срез
|УПОРЯДОЧИТЬ ПО Срез.Дата");

Получить курсы на конец каждого месяца:

МассивДат = Новый Массив();
Для i = 1 По 12 Цикл
    ДатаМесяца = Дата(2025, i, 28); // Конец месяца
    МассивДат.Добавить(ДатаМесяца);
КонецЦикла;

Запрос = Новый Запрос("ВЫБРАТЬ
|    Срез.Дата,
|    Срез.Курс
|ИЗ
|    РегистрСведений.КурсыВалют.СрезПоследних(@Даты) как Срез");

Запрос.УстановитьПараметр("Даты", МассивДат);

Best Practices

1. Всегда указывай период:

  • Вместо Неопределено используй конкретную дату
  • Это ускорит запрос

2. Используй СрезПоследних:

  • Для получения актуальных значений
  • Наиболее эффективно

3. Проверяй Периодичность:

  • День — вся история
  • Нет периодичности — одна запись

4. Кэшируй справочные данные:

  • Курсы, коэффициенты часто используются
  • Сохраняй в переменные

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