Имя: Пароль:
1C
1С v8
Реализация аналога Цел() в запросе
0 nuctoh
 
17.04.12
17:29
Необходимо выделить количество полных часов в разности дат в тексте запроса. Оба кода

РАЗНОСТЬДАТ(ДатаНачала, ДатаЗавершения, ЧАС)

и

ВЫРАЗИТЬ(РАЗНОСТЬДАТ(ДатаНачала, ДатаЗавершения, СЕКУНДА)/3600 КАК ЧИСЛО(10, 0))

не работают как надо - они округляют в ближайшую целую сторону, а надо всегда в меньшую. Есть предложения?
1 PR
 
17.04.12
17:30
Миллион раз было.
Округляй значение плюс половина единицы значения.
2 Kreont
 
17.04.12
17:30
+0,5
3 vmv
 
17.04.12
17:31
2 миллиона раз не используйте ВЫРАЗИТЬ через ж - оно для другого органа
4 andrewks
 
17.04.12
17:31
-0.5
5 PR
 
17.04.12
17:33
(4) А, ну да, ессно.
Плюс для отрицательных значений нужно наоборот прибавлять.
6 PR
 
17.04.12
17:34
(0) В данном случае вообще все по другому решается, без всяких выразить
7 nuctoh
 
17.04.12
17:35
(3) Модератор, повесь сало на vmv - он всегда флудит
(6) Как?
8 Rico_1C
 
17.04.12
17:37
РАЗНОСТЬДАТ(<Дата1>, <Дата2>, Час)
9 nuctoh
 
17.04.12
17:38
(8) На Rico_1C тоже сало с-часок просится. Я ж писал что этот метод не округляет до БЛИЖАЙШЕГО часа, а не до меньшего
10 nuctoh
 
17.04.12
17:39
(4) andrewks - спасибо, то что надо. Надо бы курс вычмата повторить
11 PR
 
17.04.12
17:46
(7) РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(<Дата1>, ДЕНЬ), НАЧАЛОПЕРИОДА(<Дата2>, ДЕНЬ), Час)
Тебе все по делу подсказывают, протри мозги от сала.
12 PR
 
17.04.12
17:47
+(11) В смысле ессно
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(<Дата1>, ЧАС), НАЧАЛОПЕРИОДА(<Дата2>, ЧАС), Час)
13 nuctoh
 
17.04.12
17:50
(12) Проверяй код перед публикацией:

РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(11:59, ЧАС), НАЧАЛОПЕРИОДА(12:00, ЧАС), Час) = 1

А по ТЗ - надо 0
14 PR
 
17.04.12
17:59
(13) Правильно говорят, наглость — второе счастье.
Поражаюсь с людей, ждущих за бесплатно решение под ключ, не желающих включить мозг.
Нужно написать ВЫБОР, в котором отдельно обрабатывать ситуации, когда время первой даты > и когда < времени второй даты.

Решение сложнее, чем вычесть ноль пять, ессно.
Однажды только оно меня и спасло.
15 Mickeleangelo
 
17.04.12
18:03
ВЫРАЗИТЬ(РАЗНОСТЬДАТ(ДатаНачала, ДатаЗавершения, СЕКУНДА)/3600-0.49 КАК ЧИСЛО(10, 0))

Без учета (14)
16 Mickeleangelo
 
17.04.12
18:09
(15) Вру. Надо -0.5, +0.49 надо при округлении всегда в большую сторону. А еще правильней проверять на то, что число уже целое.
17 nuctoh
 
17.04.12
18:10
(14) А я поражаюсь с людей, не приемлющих изящного решения, что сподвигает их на поиски индусокода типа отдельной обработки ситуаций ВЫБОРом.

(15) Да, -0.49 ошибается на округлении дроби > х.990
18 PR
 
17.04.12
18:13
(17) Изящное решение — это ЦЕЛ в запросе, но его нет.
19 nuctoh
 
17.04.12
18:16
Жаль, что на волшебном форуме создатель темы не может закрыть ее после получения удовлетворяющего его ответа
20 nuctoh
 
17.04.12
18:16
Это было бы изящно
21 PR
 
17.04.12
18:21
(19) http://www.forum.mista.ru/about.php
"Обратите внимание, что после создания темы она уже не принадлежит вам лично и вы не можете ею распоряжаться, например, требовать закрытия темы, даже если вы получили ответ на поставленный вопрос. Это сделано сознательно, потому что тема может быть интересна другим участниками форума или она наведет их на другие мысли (возможно даже не связанные с исходной поставленной темой). Из таких тем могут возникать даже новые проекты и сообщества!".
22 nuctoh
 
17.04.12
18:26
Да-да, я тоже читал. Новые проекты и сообщества - это хорошо, но чаще всего другие мысли участников хоронят под собой одну светлую мысль одного человека со светлой головой.