Надо ли по-прежнему приводить конец периода к концу дня

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

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

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

т.к. во первых уже написаны гигабайты кода с учетом этой особенности
во вторых есть штатный механизм Граница, который позволяет формировать остаток на конец секунды
5. nomad_irk 76 15.03.24 09:00 Сейчас в теме
(4)
Как заставить запрос брать остатки на конец МоментаВремени - не нашел. Видимо, такого способа нет

Используя вместо даты все ту же Граница вида Включая от МоментВремени().
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Oldsad 26.02.24 03:47 Сейчас в теме
(1) Совет по прежнему актуальный

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

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

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

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

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


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

Используя вместо даты все ту же Граница вида Включая от МоментВремени().
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот