Значения каких типов можно передавать в параметр "период" виртуальной таблицы регистра сведений?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Параметр Период в регистрах сведений
Регистры сведений отличаются от регистров накопления по механизму работы с параметром Период. Поддерживаются следующие типы.
Основное отличие
Регистры сведений хранят текущее значение, а не накапливают движения. Параметр Период используется для выборки по временным срезам истории.
Поддерживаемые типы Период
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. Кэшируй справочные данные:
- Курсы, коэффициенты часто используются
- Сохраняй в переменные
Параметр Период в регистрах сведений критичен для работы с историческими данными и получения актуальных значений на конкретные моменты времени.