Рассмотрим виртуальные таблицы в СКД 1С: Обороты, Остатки, ОстаткиИобороты.
Дано: регистр накопления(остатки) в котором есть запись на 31.12.2021 23:59:59

Виртуальная таблица Остатки строится на начало секунды, указанной в параметре Период, другими словами не включают дату. Об этом рассказано в статье ИТС Особенности использования периодов и моментов времени при получении остатков. Таким образом следующий запрос:
ВЫБРАТЬ
Остатки.Товар КАК Товар,
Остатки.Склад КАК Склад,
Остатки.КоличествоОстаток КАК Остаток
ИЗ
РегистрНакопления.ТоварныеЗапасы.Остатки(&Период, Товар = &Товар) КАК Остатки
при использовании различных параметров приведет к разным результатам
| Период | Остаток | Примечание |
| 31.12.2021 23:59:59 | 10 | Остаток на начало секунды. Не совсем то что мы хотели |
| 01.01.2022 0:00:00 | 9 | Остаток на начало следующей секунды. То что нужно! |
| Граница Включая; 31.12.2021 23:59:59 | 9 | Используется объект Граница с видом Включая. То что нужно! |
Виртуальные таблицы Обороты, Остатки и обороты включают дату начала и дата окончания. Об этом написано в статье ИТС Особенности использования периодов и моментов времени при получении оборотов. Проверим это следующим запросом:
ВЫБРАТЬ
Обороты.Товар КАК Товар,
Обороты.Склад КАК Склад,
Обороты.КоличествоОборот КАК Количество
ИЗ
РегистрНакопления.ТоварныеЗапасы.Обороты(&НачалоПериода, &КонецПериода, , Товар = &Товар) КАК Обороты
При параметрах НачалоПериода = 01.01.2021 12:00:00 и КонецПериода = 31.12.2021 23:59:59 получаем значение в поле Количество = 9
Также существует миф что СКД учитывает остатки на конец секунды когда передаем параметр период в виртуальную таблицу Остатки. Но это не так, так как в наборе данных запрос используется обычный запрос. Поэтому при получении остатков также следует учитывать то что остатки будут получены на начало секунды, и позаботиться о том чтобы установить значение параметра период +1 секунда.
Важно! при использовании объекта Стандартный период — дата начала это начало дня, дата окончания это всегда конец дня, если дата окончания указана. При такой настройке параметров

если в параметре СтандартныйПериод выбрать 01.12.2021 — 31.12.2021, то значения параметров НачалоПериода, КонецПериода будут вычислены начало и конец дня, соответственно:

Это интересно. В то же время при передаче в функцию ДобавитьКДате() параметра Стандартный период.ДатаОкончания если дата окончания не заполнена то результатом вычисления функции будет пустая дата. Другими словами, дополнительно проверять, что значение заполнено не требуется.

СтандартныйПериод с пустой датой окончания и значение параметра ДатаОстатков:

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




