← Назад к вопросам
Значения каких типов можно передавать в параметр "период" виртуальной таблицы регистра накоплений?
2.0 Middle🔥 191 комментариев
#Объекты метаданных#Регистры
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Типы параметра "Период" в виртуальных таблицах регистров накопления
Параметр "Период" в функции срезов виртуальных таблиц регистров накопления определяет граничную дату для выборки. Системно поддерживаются следующие типы.
Поддерживаемые типы
1. Дата (Date)
- Основной тип параметра
- Обычная дата в формате системы
- Получает остатки на конкретную дату
Запрос = Новый Запрос("ВЫБРАТЬ
| Остатки.Товар,
| Остатки.Склад,
| Остатки.Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладе.Остатки(@Дата) как Остатки");
Запрос.УстановитьПараметр("Дата", Дата(20250101));
Результат = Запрос.Выполнить();
2. Массив дат (Array of Dates)
- Несколько дат для среза
- Получает остатки на разные даты
- Результат с датами в результирующем наборе
МассивДат = Новый Массив();
МассивДат.Добавить(Дата(20250101));
МассивДат.Добавить(Дата(20250201));
МассивДат.Добавить(Дата(20250301));
Запрос = Новый Запрос("ВЫБРАТЬ
| Остатки.Период,
| Остатки.Товар,
| Остатки.Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладе.Остатки(@ДатыСреза) как Остатки");
Запрос.УстановитьПараметр("ДатыСреза", МассивДат);
Результат = Запрос.Выполнить();
3. Неопределённо (Undefined)
- Передача пустого параметра
- Получает все остатки без ограничения по дате
- Осторожно использовать на больших таблицах
Запрос = Новый Запрос("ВЫБРАТЬ
| Остатки.Товар,
| Остатки.Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладе.Остатки(Неопределено) как Остатки");
// Получит ВСЕ остатки без фильтрации по дате
Результат = Запрос.Выполнить();
Практические примеры
Остатки на конкретную дату:
Процедура ПолучитьОстаткиНаДату(Дата)
Запрос = Новый Запрос("ВЫБРАТЬ
| Остатки.Товар,
| Остатки.Склад,
| СУММА(Остатки.Количество) КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладе.Остатки(@Дата) как Остатки
|СГРУППИРОВАТЬ ПО
| Остатки.Товар,
| Остатки.Склад");
Запрос.УстановитьПараметр("Дата", Дата);
Результат = Запрос.Выполнить();
КонецПроцедуры;
Динамика остатков за месяц:
Процедура ПолучитьДинамикуОстатков(НачалоПериода, КонецПериода)
МассивДат = Новый Массив();
// Добавляем даты через каждые 5 дней
ТекущаяДата = НачалоПериода;
Пока ТекущаяДата <= КонецПериода Цикл
МассивДат.Добавить(ТекущаяДата);
ТекущаяДата = ТекущаяДата + 5 * 86400; // +5 дней в секундах
КонецЦикла;
Запрос = Новый Запрос("ВЫБРАТЬ
| Остатки.Период,
| Остатки.Товар,
| Остатки.Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладе.Остатки(@Даты) как Остатки");
Запрос.УстановитьПараметр("Даты", МассивДат);
Результат = Запрос.Выполнить();
КонецПроцедуры;
Сравнение остатков на две даты:
Процедура СравнитьОстатки(ДатаНачало, ДатаКонец)
МассивДат = Новый Массив();
МассивДат.Добавить(ДатаНачало);
МассивДат.Добавить(ДатаКонец);
Запрос = Новый Запрос("ВЫБРАТЬ
| Остатки.Период,
| Остатки.Товар,
| СУММА(СЛУЧАЙ КОГДА Остатки.Период = @ДатаНачало ТОГДА Остатки.Количество ИНАЧЕ 0 КОНЕЦ) КАК ОстатокНачало,
| СУММА(СЛУЧАЙ КОГДА Остатки.Период = @ДатаКонец ТОГДА Остатки.Количество ИНАЧЕ 0 КОНЕЦ) КАК ОстатокКонец
|ИЗ
| РегистрНакопления.ТоварыНаСкладе.Остатки(@Даты) как Остатки
|СГРУППИРОВАТЬ ПО
| Остатки.Товар");
Запрос.УстановитьПараметр("Даты", МассивДат);
Запрос.УстановитьПараметр("ДатаНачало", ДатаНачало);
Запрос.УстановитьПараметр("ДатаКонец", ДатаКонец);
Результат = Запрос.Выполнить();
КонецПроцедуры;
Особенности работы
С одной датой:
- Быстро, так как 1С знает точное время среза
- Получает остатки ровно на эту дату
- Оптимально для оперативных отчётов
С массивом дат:
- Может быть медленнее (зависит от размера массива)
- Результат содержит колонку Период
- Удобно для анализа динамики
С Неопределено:
- Очень медленно на больших таблицах
- Получает все записи без фильтрации
- Используется редко, в основном для специального анализа
Как это работает внутри
Срезы остатков вычисляют:
- Берут все записи по дату среза
- Группируют по аналитикам (разрезы)
- Суммируют приходы и расходы
- Вычисляют остатки
Остаток = Начальный остаток + Приходы - Расходы
Best Practices
1. Используй конкретную дату:
- Вместо Неопределено передавай точную дату
- Это ускорит запрос в 100+ раз
2. Ограничивай массив дат:
// ❌ Плохо: 365 дат за год
Массив = Новый Массив();
Для i = 1 По 365 Цикл
МассивДат.Добавить(Дата(20250101) + i * 86400);
КонецЦикла;
// ✅ Хорошо: 12 дат (по месяцам)
Массив = Новый Массив();
Для i = 1 По 12 Цикл
МассивДат.Добавить(Дата(2025, i, 1));
КонецЦикла;
3. Используй срезы оборотов для периодов:
- Для анализа за период используй срезы оборотов
- Это быстрее, чем вычитать остатки
Типы параметра Период критичны для эффективной работы с регистрами накопления, позволяя гибко выбирать данные за нужные периоды.