В обучающем курсе Евгения Гилева «Программирование за 21 день», который немного устарел но по-прежнему содержит массу полезной информации, при создании отчетов по регистрам накопления типа Остатки постоянно рекомендуется дату конца периода приводить к концу дня, типа
```1c
    ДобавитьКДате(КонецПериода(&ДатаКонца, "День"), "Секунда", 1)
```
. Кто может подсказать, устарел ли этот совет? Я надеюсь, что устарел, и в нынешних версиях платформы (у меня версия 8.3.18) этих громоздких конструкций уже применять не требуется, то есть отчет и так будет сформирован по конец дня, до последней секунды. Так или нет?
---
Совет по прежнему актуальный

Остаток по умолчанию формируется на начало указанной секунды

1С не будет менять это в платформе версии 8.х,

т.к. во первых уже написаны гигабайты кода с учетом этой особенности
во вторых есть штатный механизм Граница, который позволяет формировать остаток на конец секунды
---
Как заставить запрос брать остатки на конец МоментаВремени - не нашел. Видимо, такого способа нет
Используя вместо даты все ту же Граница вида Включая от МоментВремени().
---
Совет по прежнему актуальный

Остаток по умолчанию формируется на начало указанной секунды

1С не будет менять это в платформе версии 8.х,

т.к. во первых уже написаны гигабайты кода с учетом этой особенности
во вторых есть штатный механизм Граница, который позволяет формировать остаток на конец секунды
---
Спасибо! про Границу я не знал. Интересно, почему в курсе Гилева она не упоминается? Похоже потому, что в СКД нет места, чтобы создать границу. Границу можно создать только в программном коде. Это довольно неудобно
---
Продолжаем разговор про классический курс Евгения Гилева «Программирование в 1С за 21 день». По ходу дела показался необоснованным его постулат о том, что контролировать остатки надо только в документах, проводимых оперативно. Не видно, из чего это следует. Следовательно, имеет смысл попробовать контролировать остатки и в документах, проводимых неоперативно. Попытался это напрограммировать, и столкнулся с трудностью - как определить момент времени, на который запросом определять остатки. Вроде бы есть родной метод МоментВремени(), значит на него и определять. Однако оказалось, что это не работает: результат запроса выходит всегда пустой. По-видимому, это вызвано тем что остатки берутся на начало момента времени, а не на конец, и поэтому движения сделанные самим документом, в запрос не попадают. Как заставить запрос брать остатки на конец МоментаВремени - не нашел. Видимо, такого способа нет. Тогда решил в качестве момента времени брать Дату документа, а проблему что берет остатки на начало а не на конец - решить тем, что к дате добавить 1 секунду. В результате весь код получился такой:

```1c
    Движения.ОстаткиТоваров.Записывать = Истина;
    Для Каждого ТекСтрокаТовары Из Товары Цикл
    Движение = Движения.ОстаткиТоваров.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Товар = ТекСтрокаТовары.Товар;
    Движение.Количество = ТекСтрокаТовары.Количество;
    КонецЦикла;

    Движения.Записать();

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиТоваровОстатки.Товар КАК Товар,
    | -ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество
    |ИЗ
    | РегистрНакопления.ОстаткиТоваров.Остатки(
    | &Дата,
    | Товар В
    | (ВЫБРАТЬ
    | РеализацияТоваровТовары.Товар КАК Товар
    | ИЗ
    | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
    | ГДЕ
    | РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки
    |ГДЕ
    | ОстаткиТоваровОстатки.КоличествоОстаток < 0";

    Запрос.УстановитьПараметр("Дата", Дата + 1);
    Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

    Если НЕ РезультатЗапроса.Пустой() Тогда
    Отказ = Истина;

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщить("Недостаточно товара " + ВыборкаДетальныеЗаписи.Товар + ", не хватает " + ВыборкаДетальныеЗаписи.Количество);
    КонецЦикла;
    КонецЕсли;
```

Этот код работает нормально. Однако всё же фрагмент Дата+1 вызывает сомнения. Ведь в этот промежуток времени может попасть еще несколько документов, и тогда результат выйдет неверный. Кто может сказать, каким же образом ПРАВИЛЬНО надо делать контроль остатков при неоперативном проведении?
---
Как заставить запрос брать остатки на конец МоментаВремени - не нашел. Видимо, такого способа нет
Используя вместо даты все ту же Граница вида Включая от МоментВремени().