1с граница в запросе не работает

Обновлено: 08.07.2024

Имеются параметры запроса НачПериода, КонПериода, перед формированием запросом данные реквизиты предварительно устанавливаются
НачПериода=НачалоДня(НачПериода);
КонПериода=КонецДня(КонПериода);
Но в запросе условие Дата МЕЖДУ &НачПериода И &КонПериода не отрабатывается, точнее не работает &КонПериода,
хотя получается КонПериода вида дд.ММ.гггг 23:59:59 и в результате документы с датой конца дня не попадают под данное условие.
Приходится перед запросом устанавливать КонПериода=КонецДня(КонПериода)+1;
И только тогда все работает, и вообще МЕЖДУ применительно к переменным датам работает как больше и равно / меньше и равно, или больше/меньше?
Платформа 1С 8.2.19.83

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

(1) independ,
"МЕЖДУ" работает до границы дата, т.е. 59 секунда тоже попадает в результат.
Проверьте значения устанавливаемых параметров, может быть в них ошибка.
Кстати, в запросе можно задать условие с приведением к концу дня:


работает, для информации в качестве даты используется поле Период в регистре накопления

(8) independ, ты текст запроса покажешь нам или нет ? а то мы гадаем, а у тебя уже регистр накопления вырисовывается)))

Приходится перед запросом устанавливать КонПериода=КонецДня(КонПериода)+1;

МЕЖДУ применительно к переменным датам работает как больше и равно / меньше и равно, или больше/меньше?


Между работает как между датами включая эти даты. Но дата '25.03.2019 23:59:59' не включает все что между ней и '26.03.2019 00:00:00', а там может быть бесконечно много записей. Их выборку можно достать через момент времени или границу, но оператор Между работает только с Дата. По-этому добавление 1 сек нормальная практика. Единственно, нужно представлять, что в таком случае могут быть захвачены и записи на эту дополнительную секунду тоже. И обычно используют виртуальную таблицу оборотов для РН. Там можно указывать выборку по границе включая последнюю секунду.

Момент времени:
Фирма 1С описывает так:
Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методов других объектов, имеющих тип МоментВремени.
Момент времени используется в тех случаях, когда важно различать моменты времени для объектов, имеющих одинаковую дату и время, например для сравнения положений документов на временной оси.

А своими словами:
Момент времени - комбинация даты и ссылки на документ. Позволяет разделить и упорядочить документы в пределах одной секунды, выстраивая все документы в однозначную последовательность. Получение данных при проведении на момент времени гарантирует, что будут учтены движения сделанные в ту же секунду что и проводимый документ, но находящиеся перед ним.
Но есть особенность - документы проведенные в одну и ту же секунду располагаются в произвольном порядке, а не в порядке их физического создания (как было в 7.7).

МоментВремени() - это момент непосредственно ПЕРЕД позицией документа (аналог РассчитатьРегистрыНа(ТекущийДокумент() в 7-рке), а если необходимо получить момент непосредственно после позиции документа, то используйте объект Граница
Код 1C v 8.х

При получение остатков:
"Момент времени" - виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя ДАТУ и ССЫЛКУ НА ДОКУМЕНТ)
<Виртуальная> таблица остатков не хранится в БД, а строится в момент обращения к ней.
1. подбирается больший или равный значению ПАРАМЕТР момент времени, на который РАССЧИТАНЫ остатки
2. на этот момент получаются остатки из таблицы итогов
3. если момент времени, на который считаются остатки, не совпадает с моментом времени итогов, то остатки ДОСЧИТЫВАЮТСЯ по движениям.

Граница:
Предназначен для получения и хранения границы некоторого интервала значений. Содержит граничное значение интервала, а также признак включения или исключения граничного значения в интервал.
Используется в качестве значений свойств и параметров методов других объектов, имеющих тип Граница.
Граница используется в тех случаях, когда важно указание включения или исключения граничного значения, например при получении остатков и оборотов регистров накопления, срезов и значений регистров сведений, для задания интервалов запросов.

ВидГраницы - Определяет набор видов границ по отношению к граничному значению:
ВидГраницы.Включая - Граница включает граничное значение.
ВидГраницы.Исключая - Граница исключает граничное значение.
Код 1C v 8.х


Пример получения остатков на дату документа, включая его движения
Код 1C v 8.х

Пример получения остатков на дату документа, но до его движений
Код 1C v 8.х

Читайте также: