Имя: Пароль:
1C
1С v8
В отчете на СКД не видит 23.59.59
,
0 dark70
 
20.03.23
15:15
Тем избитая, но не получается.
Запрос по двум регистрам : остатиИобороты и второй- остатки.
Для ОстатковИОборотов НачалоПериода = &Период.ДатаНачала, КонецПериода = &Период.ДатаОкончания
Для регистра Остатков как только не пробовал, и секунду добавлял и конецДня ставил.
Сейчас, например, КонецПериодаОстатков = КОНЕЦПЕРИОДА(&КонецПериода, "ДЕНЬ")
Это запрос по Остаткам
ВЫБРАТЬ
    АР_ВзаиморасчетыПоАрендеОстатки.Контрагент КАК Контрагент,
    АР_ВзаиморасчетыПоАрендеОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента,
    АР_ВзаиморасчетыПоАрендеОстатки.СуммаОстаток КАК Остаток,
    АР_ВзаиморасчетыПоАрендеОстатки.ОбъектАренды КАК ОбъектАренды
ИЗ
    РегистрНакопления.АР_ВзаиморасчетыПоАренде.Остатки({(&КонецПериодаОстатков)}, ) КАК АР_ВзаиморасчетыПоАрендеОстатки
ГДЕ
    АР_ВзаиморасчетыПоАрендеОстатки.Депозит = ЛОЖЬ

Но все равно не цепляет документы 23.59.59, только если поставить КонецПериода след. день.
Еще вот так пробовал
ДобавитьКДате(КонецПериода(&КонецПериода, "ДЕНЬ"),"Секунда",1)
тоже не цепляет.
1 dark70
 
20.03.23
15:17
2 vicof
 
20.03.23
15:28
КОНЕЦПЕРИОДА(Параметры.ДатаОкончания, "ДЕНЬ")
3 vicof
 
20.03.23
15:29
Ну и может нет на 23:59:59 недепозитных остатков
4 ASU_Diamond
 
20.03.23
15:29
А если в запросе прописать конец дня?
5 Новый1сник2
 
20.03.23
15:43
(0) КонецПериода и КонецПериодаОстатков одна дата ? попробуй в выражении заполнить &Период.ДатаОкончания
6 Новый1сник2
 
20.03.23
15:43
+ для остатков
7 dark70
 
20.03.23
15:44
(2) Так и сделано
Остатки есть, смотрю по другому отчету. Да и стоит изменить время документа на 23.59.58 и остатки появляются.
КОНЕЦПЕРИОДА(&Период.ДатаОкончания, "ДЕНЬ") может так ? Попробовал, та же фигня.
(5) Пробовал.
8 Новый1сник2
 
20.03.23
15:45
вообще то в стандартный период, должны все документы попадать. странно
9 Timon1405
 
20.03.23
15:47
может быть в типе параметра "КонецПериодаОстатков" дата стоит, а не дата+время?
10 p-soft
 
20.03.23
15:47
остатки и обороты попробуйте. для глюка как то необычно..
11 Новый1сник2
 
20.03.23
15:48
(9) опередил
12 toypaul
 
гуру
20.03.23
15:52
Все правильно работает. В СКД таблица "Остатки" получается данные на НАЧАЛО периода. То есть на начало секунды. Поэтому нужно взять начало следующего дня чтобы получить остаток на конец секунды. Либо отдельные извращенцы передаются границу в параметр периода - и вроде как так тоже работает
13 dark70
 
20.03.23
15:55
(8) Попадают если по одному регистру. А тут два разных.
(12) А если будет документ след. дня со времененм 0.00.00 ?
14 toypaul
 
гуру
20.03.23
15:56
(13) и што?
15 dark70
 
20.03.23
15:57
(14) Попадет в отчет ?
16 toypaul
 
гуру
20.03.23
15:58
(15) нет. если прочитать (12) до появления просветления :)
17 dark70
 
20.03.23
15:58
(12) Я пробовал так
ДобавитьКДате(КонецПериода(&КонецПериода, "ДЕНЬ"),"Секунда",1)
тоже не попадает.
18 arsik
 
гуру
20.03.23
15:59
(17) Через границу тогда делай.
19 toypaul
 
гуру
20.03.23
16:00
(17) значит на тебя какое-то проклятье наложено. надо молитву прочитать для его снятия
20 toypaul
 
гуру
20.03.23
16:02
Я даже думаю что проклятье это называется - не используй одни вычисляемые поля (параметры) для получения других
21 Новый1сник2
 
20.03.23
16:09
(17) а так пробовал
ДобавитьКДате(КонецПериода(&Период.ДатаОкончания, "ДЕНЬ"),"Секунда",1)
22 vicof
 
20.03.23
16:11
Щас окажется, что таблицы местами перепутаны, и соединение внутреннее
23 dark70
 
20.03.23
16:11
(12) Заменил на ОстаткиИОбороты, только использую &Период.ДатаОкончания
24 dark70
 
20.03.23
16:13
25 eddy_n
 
20.03.23
16:46
Эта тема стара как мир. Не ты один на эти грабли наступил в случае с вирт. таблицей Остатков и последней секундой дня. Используй:
  Граница = Новый Граница(Дата, ВидГраницы.Включая);
  Запрос.УстановитьПараметр("КонецПериодаОстатков", Граница);
26 eddy_n
 
20.03.23
16:48
Отчет на СКД здесь ни при чём. Причина не в нём.
27 dark70
 
20.03.23
19:05
(25) Так я же переделал на таблицу остатков и оборотов. И все равно не видит 23.59.59.
28 PR
 
20.03.23
19:16
(27) Гон

Позорище
Матчасть знает только (12)
Рукалицо
29 Гена
 
гуру
20.03.23
19:49
(12) "В СКД таблица "Остатки" получается данные на НАЧАЛО периода. То есть на начало секунды"
Секунда как вагон поезда, имеет начало и конец. Значит Остатки в запросе всегда берутся на начало вагона...
а миллисекунды в 1С есть?
30 Гена
 
гуру
20.03.23
19:54
А вообще-то они и не нужны. Раз документы 23:59:59 не попадают в запрос по остаткам, то они лежат ВНУТРИ вагона. Следовательно, можно не бояться брать периодом начало следующего. Документы следующего периода будут в своём вагоне и никак не попадут в запрос, который запрашивает его начало как начало следующего дня.
31 Гена
 
гуру
20.03.23
19:58
На пальцах: запрос запросит остатки на начало секунды 00:00:00, поэтому документ от 00:00:00 туда не попадёт.
Один к одному как документы 13:59:59 не попадают на начало секунды 23:59:59
32 dark70
 
20.03.23
20:03
Я переделал на регистр ОстаткиИОбороты. Но все равно не захватывает 23.59.59

ВЫБРАТЬ
    АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.Контрагент КАК Контрагент,
    АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
    АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.ПериодАренды КАК ПериодАренды,
    АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК Долг,
    ЛЕВ(АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.Контрагент.Наименование, 1) КАК ПерваяБуква,
    АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.ОбъектАренды КАК ОбъектАренды,
    АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.Регистратор КАК Регистратор,
    АР_ВзаиморасчетыПоАрендеОстаткиИОбороты1.СуммаВзаиморасчетовКонечныйОстаток КАК Остаток
ИЗ
    РегистрНакопления.АР_ВзаиморасчетыПоАренде.ОстаткиИОбороты({(&НачалоПериода)}, {(&КонецПериода)}, Авто, , ) КАК АР_ВзаиморасчетыПоАрендеОстаткиИОбороты1
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.АР_ВзаиморасчетыПоАренде.ОстаткиИОбороты(
                {(&НачалоПериода)},
                {(&КонецПериода)},
                Авто,
                ,
                ПериодАренды >= &НачалоПериода
                    И ПериодАренды < &КонецПериода) КАК АР_ВзаиморасчетыПоАрендеОстаткиИОбороты
        ПО АР_ВзаиморасчетыПоАрендеОстаткиИОбороты1.Контрагент = АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.Контрагент
            И АР_ВзаиморасчетыПоАрендеОстаткиИОбороты1.ДоговорКонтрагента = АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.ДоговорКонтрагента
            И АР_ВзаиморасчетыПоАрендеОстаткиИОбороты1.ОбъектАренды = АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.ОбъектАренды
ГДЕ
    АР_ВзаиморасчетыПоАрендеОстаткиИОбороты.Депозит = ЛОЖЬ
    И АР_ВзаиморасчетыПоАрендеОстаткиИОбороты1.Депозит = ЛОЖЬ

Конфигурация специализированная, поэтому не обращайте внимание на все эти депозиты и периоды оплаты.
Стоит время документа сместить на секунду раньше и документ попадает в отчет, т.е. движения документа влияют на остаток.
33 dark70
 
20.03.23
20:04
Долг разворачивается по периодам слева направо, а вот Остаток неверный, не видит 23.59.59
34 dark70
 
20.03.23
20:06
(31) ДобавитьКДате(КонецПериода(&КонецПериода, "ДЕНЬ"),"Секунда",1) тоже не попадает.
Только явно указать след. день в КонецПериода.
35 Гена
 
гуру
20.03.23
20:12
(34) Вы меня не поняли, я предлагаю вместо СКД текущего периода использовать СНД следующего. Если в запросе у Вас я вижу &КонецПериода, то наверное должна быть и какая-то &НачалоПериода, но только следующего... нет?
36 PR
 
20.03.23
20:21
Рукалицо
Сборище упоротых новичков
37 Гена
 
гуру
20.03.23
20:28
(34) "Только явно указать след. день в КонецПериода"
Отлично. Мы выяснили минимальный квант периода в запросе. Значит нам достаточно СНД запроса для следующего дня (+1 к текущему любому периоду)
38 dark70
 
20.03.23
20:29
Да как-то странно, я там хоть день добавлю, все равно остатки не те.
ДобавитьКДате(КонецПериода(&КонецПериода, "ДЕНЬ"),"День",1)
В другом дело.
39 Гена
 
гуру
20.03.23
20:38
(38) вот же я вижу в запросе:
АР_ВзаиморасчетыПоАрендеОстаткиИОбороты1.СуммаВзаиморасчетовКонечныйОстаток

А для НАЧАЛЬНОГО остатка подобной нет?
АР_ВзаиморасчетыПоАрендеОстаткиИОбороты1.СуммаВзаиморасчетовНАЧАЛЬНЫЙОстаток
40 Тындр
 
20.03.23
21:25
а можнож было вместо даты границу времени "включая" секунду передать, не?
41 eddy_n
 
20.03.23
21:58
(40) Можно было бь нормально реализовать в случае с вирт. таблицами на стороне вендора функцию КонецПериода(КонДата, День) и всё - вопрос был бы закрыт. А так - вечная тема для не одного поколения.
42 rudnitskij
 
20.03.23
22:02
(40) ему это три раза уже писали, он не знает что такое граница
43 PR
 
20.03.23
22:07
(41) Какой ты умный, тебе череп не жмет?
А КонецПериода('20000101', День) = '20000101235959'?
И что делать, если мне нужны начальные остатки, а не конечные?
44 Lexandr
 
20.03.23
22:14
Ну варианты всякие могут быть, как присобачить эту +1 секунду при получении остатков.
45 Lexandr
 
20.03.23
22:15
46 dark70
 
20.03.23
22:16
(40) Да хоть что там передавай. Пока не убрал СтандартныйПериод, ничего не получалось.
Т.е. был Период и у НачалоПериода было выражение Период.ДатаНачала, у конца периода соотв-но Период.ДатаОкончания.
И границу передавал и просто секунды прибавлял в параметр КонецПериодаОстатков, смотрел в отладчике, параметры четко заполнялись в ПриКомпоновке.
Убрал Период, теперь конечно не так удобно, приходится отдельно вбивать НачалоПериода и КонецПериода, и там прописал выражение
ДобавитьКДате(КонецПериода(&КонецПериода, "ДЕНЬ"),"Секунда",1)
зато нормально видит и долги развернуть по периодам и конечный остаток.
47 PR
 
20.03.23
22:17
(44) Там два варианта, либо брать '20000102' либо граница конца дня включая, обе уже обсосали сто раз, но кому-то по ходу нравится обсасывать обсосанное снова и снова, поливая обсосанное горючими слезами
48 PR
 
20.03.23
22:18
(46) Трындежь, поменяй прокладку
49 dark70
 
20.03.23
22:19
(45) Как раз вот так было
https://career.i-neti.ru/wp-content/uploads/2022/03/image3.png
Но не работало
50 Гена
 
гуру
21.03.23
08:01
По логике понятно, что структура любого регистра накопления не может быть непрерывной, а является зернистой в 1 секунду. Понятно также, что надо было как-то определиться с протяжённостью этой секунды и выбрали когда-то её начало. Хорошо. Но почему тогда сразу во внутреннем предопределённом механизме не заложили сдвиг вперёд на длину этой секунды, если запрашивается конец периода?
Как я понял, здесь уже устали от многолетних вопросов от новичков по 59-ой секунде и давно уже найдены КОСТЫЛИ для решения данной проблемы.
А почему никто не спросил, а зачем я хожу на костылях? Почему бы не попросить фирму 1С перепрошить внутренний алгоритм и по запросу КонецПериода сразу же добавлять секунду? Зачем заставлять программистов вечно ходить на костылях?
51 PR
 
21.03.23
10:20
Вот ведь вроде еще не пятница, а клоуны уже набежали гурьбой
52 Новый1сник2
 
21.03.23
10:27
(49) проверил на своем отчете дата окончания = 31.03.2023, ДатаОстатков = 01.04.2023 0:00:00
Для ДатыОстатков в СКД выражение ДобавитьКДате(КонецПериода(&ПериодОтчета.ДатаОкончания, "ДЕНЬ"),"Секунда",1)
53 azernot
 
21.03.23
10:44
(50) В далёком начале 2000-х, точно не помню в 2003 или в 2004, когда плотно занялся 1С 8, я столкнулся с тем, что виртуальная таблица Остатки регистров накопления по-умолчанию для даты, указанной в параметре "Период" использует остатки на границу "исключая" (т.е. на начало секунды), в отличие от виртуальной таблицы ОстаткиИОбороты, которая конечный остаток получает на границу "включая". Я тоже удивился, почему так? Ведь примерно в 90% случаев таблица Остатки используется для получения именно конечных остатков. Казалось бы, ну сделайте по-умолчанию "включая", а если пользователю понадобится, он передаст границу "исключая". Внятный ответ я так и не нашёл, воз и ныне там, а программисты продолжают наступать на эти грабли.

К чему я это? К тому, что проблема давняя, известная. Но судя по тому, что за 20 лет ничего не изменилось в этом направлении, есть достаточно веские причины для того, чтобы Остатки работали так, как работают. Не думаю, что стоит ждать изменений. Остатки так и будут работать, как работают. С этим надо просто смириться.. и продолжать жрать кактус используя Границу или сдвигая период на секунду.
54 PR
 
21.03.23
10:47
(53) И ты туда, Брут?
Что скажешь про (43)?
Что делать, если мне нужны остатки именно на начало, а не на конец?
55 azernot
 
21.03.23
10:49
(54) Что делать? Я ж ответил. Использовать границу "Исключая" или добавлять -1 секунду! Ровно так же как делается сейчас, чтобы получать конечные остатки.
56 PR
 
21.03.23
10:54
(55) А, то есть ты про то, что кактус потому, что по дефолту не конечные остатки, а начальные
Ну такое, сомнительное
57 azernot
 
21.03.23
11:04
(56) Я думаю, всему виной то, что предполагалось, что основная функция метода Остатки() - получение остатка на момент времени регистратора (а там как правило нужно на момент не включая движения этого регистратора). Но это не точно, поэтому т-с-с-с-с!
;)
58 Гена
 
гуру
21.03.23
11:21
(53) тогда костыль исчезнет для конца периода, но появится для начала. Это не выход.
Надо принять, что 20 лет назад договорились использовать дно стакана, в которое налита секунда.
Просто для КонецПериода внутри сразу заалгоритмировать плюс 1 сек, т.е. воспользоваться тем, что планковское время для 1С секунда.
И тогда больше никогда ни один программист не будет больше ходить на костылях.
И не надо бояться документов, проведёных в 00:00:00, ведь дно стакана первой секунды будет ниже.
59 azernot
 
21.03.23
11:25
(58) Я против такого "планкового времени". У меня в базе может быть больше, чем 86400 документов в сутки.
60 Гена
 
гуру
21.03.23
11:27
(59) да хоть миллион
61 PR
 
21.03.23
11:29
(59) В одной секунде может быть больше одного документа
И граница — это дата + ссылка на регистратор
62 Гена
 
гуру
21.03.23
11:40
Понятно, что не надо напрямую менять внутреннюю сущность ПериодКонец, иначе рухнут все отчёты.
Достаточно попросить фирму 1С ввести новую сущность ПериодКонецНовый и тогда программисты будут в своих новых запросах спокойно её использовать.
63 PR
 
21.03.23
11:41
(62) Граница включая
64 azernot
 
21.03.23
11:42
(62) Ага, и потом будет миллиард тем на Мисте "Помогите, в отчёт попадают данные за первую секунду следующего дня!". Потому что кто-то обязательно будет использовать этот "ПериодКонецНовый" в таблице ОстаткиИОбороты.
65 azernot
 
21.03.23
11:49
Но в принципе, можно было бы расширить набор свойств у общего объекта "СтандартныйПериод". Кроме ДатаНачала и ДатаОкончания добавить к примеру: ДатаНачалаГраницаВключая, ДатаОкончанияГраницаВключая.
66 Гена
 
гуру
21.03.23
11:49
(64) да не попадут они никак. Вон же автор ветки принудительно сдвинул на секунду конец и всё нормально. Да и упоминал он же выше, что все доки 58 попадают, а 59 не попадают. Значит после сдвига попадут все доки 59 и НЕ ПОПАДУТ все 00. Чудес не бывает.
Мы же вроде уже выяснили, что на зернистой временной шкале, несмотря на громкое название сКд - всё равно идёт анализ НА НАЧАЛО последнего зерна конечного периода, т.е. на начало зерна 59.
67 azernot
 
21.03.23
11:53
(66) Виртуальная таблица ОстаткиИОбороты получает конечный остаток на конец периода по методу границы "Включая" :)
И если вы сделаете в СКД запрос типа МойРегистр.ОстаткиИОборты(&НачалоПериода, ДобавитьКДате(КонецПериода(&КонецПериода, "ДЕНЬ"),"Секунда",1))
вам в оборот попадут данные за 1 секунду дня следующего за &КонецПериода (как в обороты, так в остатки)

Просто попробуйте. :)
68 PR
 
21.03.23
11:55
(66) Автор ветки унылый наркоман, у него вообще ничего не работает, даже то, что у других работает
Только воду мутит
69 Гена
 
гуру
21.03.23
11:58
(67) зачем пробовать - и так понятно из названия, что метод "включая границу" как раз и даёт сдвиг на секунду )
70 Новый1сник2
 
21.03.23
12:01
(65) согласен, интересная идея
71 azernot
 
21.03.23
12:01
(69) Я предлагаю вам попробовать, чтобы убедиться что виртуальные таблицы Остатки() и ОстаткиИОбороты() по-разному работают с параметрами Период и КонецПериода соответсвенно.
Мне кажется вы это не осознаёте в (66).
72 Гена
 
гуру
21.03.23
12:04
(70) я пока не совсем согласен. ДатаОкончанияГраницаВключая - это понятно и красиво сработает.
А вот для начала периода включать границу, по-моему, ни к чему.
73 Гена
 
гуру
21.03.23
12:05
(71) я уже понял, снимается КонецПериодаНовый с обсуждения. Тут оказывается можно границу ещё включать/выключать )
74 azernot
 
21.03.23
12:08
(72) Да, сходу не могу придумать прикладную задачу, где бы можно было использовать ДатаНачалаГраницаВключая. Я такой реквизит добавил бы хотя бы для симметрии. А уж программисты сами придумают, где они будут его использовать.
75 PR
 
21.03.23
12:15
(74) Ага, и потом новая волна визгов, как эти идиоты в 1С всех запутали и что нихрена непонятно, ДатаНачалаГраницаВключая — это когда на начало секунды или на конец, потому что для кого-то включая — это по аналогии с концом, а для кого-то включая — это когда попадает в период или нет

В общем, повизжать всегда найдется кому
76 Новый1сник2
 
21.03.23
12:20
(72) сама идея добавить ДатаОкончанияГраницаВключая логичная, чтобы не извращаться с добавлением секунды.
для начала периода включать границу может и не надо.
77 Гена
 
гуру
21.03.23
12:29
Глянул БП. В глазах рябит от сотен строк:
Запрос.УстановитьПараметр("КонПериода", Новый Граница(КонецПериода, ВидГраницы.Включая));
78 ssh2006
 
21.03.23
12:36
(0) Идут годы, ничего не меняется..
79 PR
 
21.03.23
12:45
(78) И не говори, как ныли, так и ноют
80 PR
 
21.03.23
12:46
(77) Может тебе профессию поменять, раз у тебя от кода в глазах рябит?
Зрение — штука важная, посадишь, что потом делать будешь
81 Гена
 
гуру
21.03.23
13:18
Итак, это костыль, когда надо обязательно включать границу, чтобы захватить 59-ю секунду. Тогда надо признать изначальный ляп языка 1С, либо приведите мне пример, когда для конца периода не нужна последняя секунда.
82 PR
 
21.03.23
13:20
(81) Ты совсем наглухо тупой что ли?
Тебе же миллиард раз сказали пример, когда остатки нужны на начало
83 Гена
 
гуру
21.03.23
13:22
(82) тук-тук-тук... про начало периода разговора нет. Дубль два: приведите пример, когда для КОНЦА периода не нужна 59-я секунда.
84 PR
 
21.03.23
13:30
(83) В конце всегда включая секунду
Ты совсем что ли в сознание не приходишь?
85 Гена
 
гуру
21.03.23
13:37
(84) Если "в конце всегда включает секунду", то зачем понадобился именно для конца периода костыль "ВключаяГраницу?
Значит Вы не правы. Без этого костыля 59-я секунда не включается в конец периода. И мы в этом убедились в данной ветке.

Значит по умолчанию граница не включена. Вот я и интересуюсь, по какой логике разработчики изначально не включили 59-ю секунду в сущность конца периода. Что-то же было тогда давно у них в голове. Какой-то пример, когда эта последняя секунда не нужна именно для конца периода.
You see?
86 PR
 
21.03.23
13:38
(85) Читай ветку с самого начала
87 echo77
 
21.03.23
18:25
Чем все закончилось?
Может у автора проблема номер ноль? https://youtu.be/IbOzq-S9jU0
88 dark70
 
21.03.23
18:33
(52) Так у меня тоже на других отчетах всегда все нормально было. А тут и с табл. остатков переписал на табл. оборотов и секунды добавлял и из приНачалеКомпоновки передавал как время, так и границу. Ничего не помогало.
Пока убрал СтандартныйПериод и сделал отдельный ввод Начала и Окончания.
https://s1.hostingkartinok.com/uploads/images/2023/03/1785616133ec579db8ef88c3141f3137.jpg
Я бы сбросил для проверки отчет, но он для спец.конфигурации, на обычной бухгалтерии не будет работать.
89 dark70
 
21.03.23
18:40
Здесь схема в архиве https://wdfiles.ru/a996c0a
90 Новый1сник2
 
22.03.23
08:14
(88) попробуй стандартный период переименовать на "ПериодОтчета"
91 Ботаник Гарден Меран
 
22.03.23
09:26
(77)
Это устаревшая версия БП.
В новых уже
Запрос.УстановитьПараметр("КонецПериода",Новый МоментВремениСУточнениемПериода(КонтекстРасчета.КонецПериода, УточнениеПериода));
92 eddy_n
 
22.03.23
10:04
(91) Как оказалось на поверку, МоментВремениСУточнениемПериода - тема не новая.
93 eddy_n
 
22.03.23
12:16
Появилось в 8.3.9 в 2016.