← Назад к вопросам
Значения каких типов можно передавать в параметр "период" виртуальной таблицы регистра накоплений?
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. Используй срезы оборотов для периодов:
- Для анализа за период используй срезы оборотов
- Это быстрее, чем вычитать остатки
Типы параметра Период критичны для эффективной работы с регистрами накопления, позволяя гибко выбирать данные за нужные периоды.
Похожие вопросы
- Какие есть виртуальные таблицы у регистра расчётов?
- Как расследуешь ошибки принимаемых запросов?
- Что такое контекст формы в 1С?
- Как организовать обмен данными между 1С и другими системами?
- Какие стандарты 1С по организации проведения документа вы знаете?
- Что такое транзакция в 1С? Есть ли вложенные транзакции?
- Какие знаешь способы пользоваться запросом?
- Может ли быть таблица итогов у регистра сведений?
- В чем разница между хранением информации в регистре сведений и в табличной части?
- Как организовать контроль остатков при проведении документа?
- Зачем использовать конструкцию ВЫРАЗИТЬ?
- В чем разница между справочником и планом видов характеристик?
- В каком случае используешь индексы в запросах?
- Что такое COM-соединение в 1С и когда его использовать?
- Что такое NULL, Неопределено, ПустаяСсылка и БитаяСсылка в 1С? Чем они отличаются?
- Что такое индекс в 1С и какие виды индексов бывают?
- Что сделать чтобы можно было производить отладку кода программы, которая выполняется в фоновом задании?
- Чем отличается подход к доработке типовых и нетиповых конфигураций?
- Какие есть типы блокировок при проведении?
- Что происходит, когда мы обращаемся к объекту через точку?