Доброго времени суток, уважаемые.
УТ 11.2. Переписанная-перекопанная, но в регистр ТоварыНаСкладах все пишется только штатными документами.
1С:Предприятие 8.3.8.1933.
Режим: Серверный (сжатие: усиленное)

Столкнулся с непонятными для меня результатами запроса к регистру ТоварыНаСкладах.
Параметры одинаковые, но остаток на конец периода разный. В случае запроса ВТ ОстаткиИОбороты на 1 меньше. Подозреваю, что проблема в документе "Оприходование излишков товаров", но куда конкретно копать - идей нет, вроде все прозрачно. Прошу помощи.

Более того, смущает отсутствующая ссылка на регистратор в результате работы запроса к ВТ ОстаткиИОбороты. Тестирование и исправление запускалось, ошибок не находит. Прикрепляю скриншоты с параметрами и результатами работы.
Подробнее1. Текст запроса к ВТ Остатки:

```1c
    ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура.Ссылка КАК НоменклатураСсылка,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), ) КАК ТоварыНаСкладахОстатки
    ГДЕ
    ТоварыНаСкладахОстатки.Номенклатура.Ссылка = &ПараметрНоменклатура
    И ТоварыНаСкладахОстатки.Склад.Ссылка = &ПараметрСклад
```

Параметры:
&Дата = 31.01.2017 23:59:59
&ПараметрНоменклатура = "Печерский заварной..."
&ПараметрСклад = "11..."

2 Текст запроса к ВТ

```1c
    ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход КАК ВНаличииПриход,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход КАК ВНаличииРасход,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииОборот КАК ВНаличииОборот,
    ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор.Ссылка КАК РегистраторСсылка,
    ТоварыНаСкладахОстаткиИОбороты.Регистратор.Дата КАК РегистраторДата
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&ПараметрДатаСтарт, ДЕНЬ),
    КОНЕЦПЕРИОДА(&ПараметрДатаКон, ДЕНЬ),
    Регистратор, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахОстаткиИОбороты
    ГДЕ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Ссылка = &ПараметрНоменклатура
    И ТоварыНаСкладахОстаткиИОбороты.Склад.Ссылка = &ПараметрСклад

    УПОРЯДОЧИТЬ ПО
    РегистраторДата
```

Параметры:
&ПараметрДатаСтарт = 31.01.2017 00:00:00
&ПараметрДатаКон = 31.01.2017 23:59:59
&ПараметрНоменклатура = "Печерский заварной..."
&ПараметрСклад = "11..."
Всем добра.
---
это почему он включит документы с временем 00.00.00 ? По вашей логике тогда он должен был включить документы 23.59.59 если мы так передадим дату 23.59.59 , вообще в данном случае я дату передаю через параметр запроса и для этого дела используется объект Граница
ДатаОстатков = новый Граница (КонецДня(КонецПериода), видГраницы.включая)

(6) да и по первому пункту должно быть стыдно - это же азы программирования в 1с которые нужно знать
---
При обращение к вирт. таблицы остатки, конечная дата не включается в расчет остатков.

то есть остатки получаются без учета последний даты (грубо говоря 23:59:59)
---
1) Действительно, если в запросе к таблице "Остатки" задаем дату выражением КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), то оно вернет время 23.59.59. А запрос возьмет данные "к этому времени", т.е. не включая секунду. Как предложение писать так:

```1c
    РегистрНакопления.ХХХХ.Остатки(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), СЕКУНДА, 1), )
```

2) При обращении к регистру допустили классическую детскую ошибку: условия отбора нужно указывать не через "ГДЕ", а в параметрах таблицы:

```1c
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&ПараметрДатаСтарт, ДЕНЬ), КОНЕЦПЕРИОДА(&ПараметрДатаКон, ДЕНЬ),
    Регистратор, ДвиженияИГраницыПериода, Номенклатура = &ПараметрНоменклатура
    И Склад = &ПараметрСклад)
```

3) ТоварыНаСкладахОстаткиИОбороты.Номенклатура - это ссылка и добавлять к нему ".Ссылка" не нужно.
---
измените время возврата поставщику на 23:59:58
---
При обращение к вирт. таблицы остатки, конечная дата не включается в расчет остатков.

то есть остатки получаются без учета последний даты (грубо говоря 23:59:59)
---
1) Действительно, если в запросе к таблице "Остатки" задаем дату выражением КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), то оно вернет время 23.59.59. А запрос возьмет данные "к этому времени", т.е. не включая секунду. Как предложение писать так:

```1c
    РегистрНакопления.ХХХХ.Остатки(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ), СЕКУНДА, 1), )
```

2) При обращении к регистру допустили классическую детскую ошибку: условия отбора нужно указывать не через "ГДЕ", а в параметрах таблицы:

```1c
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&ПараметрДатаСтарт, ДЕНЬ), КОНЕЦПЕРИОДА(&ПараметрДатаКон, ДЕНЬ),
    Регистратор, ДвиженияИГраницыПериода, Номенклатура = &ПараметрНоменклатура
    И Склад = &ПараметрСклад)
```

3) ТоварыНаСкладахОстаткиИОбороты.Номенклатура - это ссылка и добавлять к нему ".Ссылка" не нужно.
---
Спасибо за ответ. По поводу 2 пункта - проглядел, накидал на автомате, стыдно).
---
я бы НЕ прибавлял секунду т.к. получится время 00:00:00 следующих суток м если в это время есть документы - они также попадут в остатки что искривляет истинное состояние.
---
Но ведь если использовать ВТ РегистрНакопления.ТоварыНаСкладах.Остатки, то об этом можно не беспокоиться?
---
это почему он включит документы с временем 00.00.00 ? По вашей логике тогда он должен был включить документы 23.59.59 если мы так передадим дату 23.59.59 , вообще в данном случае я дату передаю через параметр запроса и для этого дела используется объект Граница
ДатаОстатков = новый Граница (КонецДня(КонецПериода), видГраницы.включая)

(6) да и по первому пункту должно быть стыдно - это же азы программирования в 1с которые нужно знать
---
Все когда-то начинают свой путь. Азы еще усваиваются.

Спасибо вам за ответ.

Наверное, использование объекта Граница будет логичней.
---
Чтобы Остатки видели 23:59:59 надо использовать Границу.