Надо ли по-прежнему приводить конец периода к концу дня
В обучающем курсе Евгения Гилева «Программирование за 21 день», который немного устарел но по-прежнему содержит массу полезной информации, при создании отчетов по регистрам накопления типа Остатки постоянно рекомендуется дату конца периода приводить к концу дня, типа . Кто может подсказать, устарел ли этот совет? Я надеюсь, что устарел, и в нынешних версиях платформы (у меня версия 8.3.18) этих громоздких конструкций уже применять не требуется, то есть отчет и так будет сформирован по конец дня, до последней секунды. Так или нет?
ДобавитьКДате(КонецПериода(&ДатаКонца, "День"), "Секунда", 1)
По теме из базы знаний
Найденные решения
(1) Совет по прежнему актуальный
Остаток по умолчанию формируется на начало указанной секунды
1С не будет менять это в платформе версии 8.х,
т.к. во первых уже написаны гигабайты кода с учетом этой особенности
во вторых есть штатный механизм Граница, который позволяет формировать остаток на конец секунды
Остаток по умолчанию формируется на начало указанной секунды
1С не будет менять это в платформе версии 8.х,
т.к. во первых уже написаны гигабайты кода с учетом этой особенности
во вторых есть штатный механизм Граница, который позволяет формировать остаток на конец секунды
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Совет по прежнему актуальный
Остаток по умолчанию формируется на начало указанной секунды
1С не будет менять это в платформе версии 8.х,
т.к. во первых уже написаны гигабайты кода с учетом этой особенности
во вторых есть штатный механизм Граница, который позволяет формировать остаток на конец секунды
Остаток по умолчанию формируется на начало указанной секунды
1С не будет менять это в платформе версии 8.х,
т.к. во первых уже написаны гигабайты кода с учетом этой особенности
во вторых есть штатный механизм Граница, который позволяет формировать остаток на конец секунды
Продолжаем разговор про классический курс Евгения Гилева «Программирование в 1С за 21 день». По ходу дела показался необоснованным его постулат о том, что контролировать остатки надо только в документах, проводимых оперативно. Не видно, из чего это следует. Следовательно, имеет смысл попробовать контролировать остатки и в документах, проводимых неоперативно. Попытался это напрограммировать, и столкнулся с трудностью - как определить момент времени, на который запросом определять остатки. Вроде бы есть родной метод МоментВремени(), значит на него и определять. Однако оказалось, что это не работает: результат запроса выходит всегда пустой. По-видимому, это вызвано тем что остатки берутся на начало момента времени, а не на конец, и поэтому движения сделанные самим документом, в запрос не попадают. Как заставить запрос брать остатки на конец МоментаВремени - не нашел. Видимо, такого способа нет. Тогда решил в качестве момента времени брать Дату документа, а проблему что берет остатки на начало а не на конец - решить тем, что к дате добавить 1 секунду. В результате весь код получился такой:
Этот код работает нормально. Однако всё же фрагмент Дата+1 вызывает сомнения. Ведь в этот промежуток времени может попасть еще несколько документов, и тогда результат выйдет неверный. Кто может сказать, каким же образом ПРАВИЛЬНО надо делать контроль остатков при неоперативном проведении?
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаТовары.Товар;
Движение.Количество = ТекСтрокаТовары.Количество;
КонецЦикла;
Движения.Записать();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваровОстатки.Товар КАК Товар,
| -ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(
| &Дата,
| Товар В
| (ВЫБРАТЬ
| РеализацияТоваровТовары.Товар КАК Товар
| ИЗ
| Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
| ГДЕ
| РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки
|ГДЕ
| ОстаткиТоваровОстатки.КоличествоОстаток < 0";
Запрос.УстановитьПараметр("Дата", Дата + 1);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Отказ = Истина;
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить("Недостаточно товара " + ВыборкаДетальныеЗаписи.Товар + ", не хватает " + ВыборкаДетальныеЗаписи.Количество);
КонецЦикла;
КонецЕсли;
ПоказатьЭтот код работает нормально. Однако всё же фрагмент Дата+1 вызывает сомнения. Ведь в этот промежуток времени может попасть еще несколько документов, и тогда результат выйдет неверный. Кто может сказать, каким же образом ПРАВИЛЬНО надо делать контроль остатков при неоперативном проведении?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот