Всегда в параметры отчета на СКД в выражение для параметра &КонецПериода писал конструкцию:

КонецПериода(&КонецПериода, "ДЕНЬ")

Тут узнал, что запрос к виртуальной таблице остатков на &КонецПериода не отрабатывает документы, у которых время 23:59:59.

Сделал такую конструкцию:

началопериода(добавитькдате(КонецПериода(&КонецПериода, "ДЕНЬ"), "секунда", 1), "день")

Она мне не нравится - какая-то некрасивая. А значит, неправильная.
Как сделать нормальную отработку границы в отчете на СКД?
---
Посмотри 41 и 42 урок Гилева по СКД.
41 - тот же вариант, что и у тебя добавитькдате(КонецПериода(&КонецПериода, "ДЕНЬ"), "секунда", 1), "день").

Второй вариант - использовать регистр оборотов и остатков и в нем ввести параметр типа СтандартныйПериод, у него два свойства ДатаНачала и ДатаОкончания вроде. Вот в ДатаОкончания и будет храниться нужный тебе момент, так как он включает в себя все движения за последнюю секунду дня.
---
совершенно верное решение Вам подсказали, параметром может быть
1) Дата
2) МоментВремени
3) Граница
Так уж устроена эта "хитрая" 1С. Типа фишка такая, чтобы всем работа находилась (здесь могла бы быть улыбка) и стимулировались шарики и ролики. В общем, все подробности, как обычно, в СП, цены на который в последнее время существенно снижены. Мне кажется также, что
Граница = Новый Граница(КонецДня(Дата), ВидГраницы.Включая);
и
Граница = Новый Граница(КонецДня(Дата)+1, ВидГраницы.Исключая);
- это синонимы, если пространство МоментовВремени считать непрерывным, т.к. разница между этими двумя границами инфинитизимальна.
А может быть и нет)))
---
Можно так
Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("Период"));
Граница = Новый Граница(КонецДня(Дата), ВидГраницы.Включая);
Параметр.Значение = Граница;
Параметр.Использование = Истина;
---
kn, я так понимаю, это надо в отчете свою обработку компоновки делать? А тупо если создать отчет без формы без всего - только изменяя саму схему компоновки, можно работать с границами?
---
Можно не создавать форму отчета, а программно задать параметр СКД Период как написано в (2) в модуле объекта(Отчета) в Процедуре ПриКомпановкеРезультата()
---
началопериода(добавитькдате(КонецПериода(&КонецПериода, "ДЕНЬ"), "секунда", 1), "день")

А для чего в этой конструкции НачалоПериода()? КонецПериода(&КонецПериода, "День") вернет 23.59.59, добавив секунду получаем 00.00.00 следующего дня, получив НачалоПериода от 00.00.00 мы получим тоже самое.
---
"виртуальной таблице остатков" эта таблица предназначена для определения остатков до указанного времени. Не понимаю, зачем её использовать применительно к КонцуПериода. Тогда используйте другую виртуальную таблицу "ОстаткиИОбороты" и заполняйте к ней ПериодОкончания тем значением, которое вам нужно, или продолжайте в запросе пересчитывать КонецПериода добавлением к нему секунды.
---
Посмотри 41 и 42 урок Гилева по СКД.
41 - тот же вариант, что и у тебя добавитькдате(КонецПериода(&КонецПериода, "ДЕНЬ"), "секунда", 1), "день").

Второй вариант - использовать регистр оборотов и остатков и в нем ввести параметр типа СтандартныйПериод, у него два свойства ДатаНачала и ДатаОкончания вроде. Вот в ДатаОкончания и будет храниться нужный тебе момент, так как он включает в себя все движения за последнюю секунду дня.
---
Ну и чем Вам так помог (8), если сами эквивалентное в вопросе написали? А вот (2) - реально Вас просвЯтил насчет границ. Конечно, граница в применении к Дате, а не МоментуВремени - это белиберда, спорить не буду. Вообще, можно было бы для этой трехэтажной конструкции придумать какое-нибудь красивое имя, вроде НачалоРаннегоУтраПрекрасногоЗавтрашнегоДняПрограммиста1С(Дата);
---
agrustny, думаю что правильно использование СтандартныйПериод вместо конструкций при компановке..
---
AllexSoft, проверил - стандартный период не работает. Т.е. тоже не захватываются движения документов со временем 23:59:59.
(8) adamx, в результате эти способы оказались не верными, вам на заметку :)
(10) agrustny, вы правы, я был вынужден в конце концов остановиться на этом варианте. Моя "конструкция" оказалась не рабочей по той причине, что влияла на другие таблицы. "31.03.2013 23:59:59" она превращает в "01.04.2013 0:00:00", таблица остатков срабатывает верно, а вот "ДвиженияССубконто" начинают цеплять документы со временем "01.04.2013 0:00:00"

Итого, мой рабочий вариант:

```1c
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    ПараметрКонецПериодаД = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериодаД"));
    ПараметрКонецПериода = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));

    Если ПараметрКонецПериодаД <> Неопределено
    И ПараметрКонецПериода <> Неопределено Тогда

    ПараметрКонецПериода.Значение =
    Новый Граница(КонецДня(ПараметрКонецПериодаД.Значение.Дата), ВидГраницы.Включая);

    КонецЕсли;

    КонецПроцедуры
```
---
Kutuzov,
```1c
    ПараметрКонецПериода.Значение = Новый Граница(КонецДня(ПараметрКонецПериода.Значение.Дата), ВидГраницы.Включая);
```

Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
{ВнешнийОтчет.tДвижение_10_90.МодульОбъекта(8)}: Поле объекта не обнаружено (Дата)
    ПараметрКонецПериода.Значение = Новый Граница(КонецДня(ПараметрКонецПериода.Значение.Дата), ВидГраницы.Включая);
---
А если у виртуальной таблицы использовать в свойствах эти даты? Мне кажется тогда будет все ок.
---
Работает
---
т.е. не работает
---
:))

```1c
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    ПараметрКонецПериода = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
    Если ТипЗнч(ПараметрКонецПериода.Значение) = Тип("СтандартнаяДатаНачала") Тогда
    ПараметрКонецПериода.Значение = Новый Граница(КонецДня(ПараметрКонецПериода.Значение.Дата), ВидГраницы.Включая);
    КонецЕсли;
    КонецПроцедуры
```
---
Использование виртуальной таблицы Остатки в СКД проблематично из-за того что нет возможности нормально установить границу периода. Используйте в СКД ОстаткиИОбороты с настройкой метода дополнения "ДвиженияИГраницыПериода".
---
Если у вас типовая, то в Параметрах СКД добавляем параметр (пусть у него будет имя ПериодГраница), с типом дата. В выражении прописываем так КомпоновкаДанныхСервер.ГраницаПериода(КОНЕЦПЕРИОДА(&Период.ДатаОкончания, "ДЕНЬ"), "Включая"), и потом указываем его использование в запросе где получение остатков. (в этом примере &Период - имеет тип СтандартныйПериод)