Разность дат красиво

1. PAAG 12.07.18 01:07 Сейчас в теме
Всем привет!
Вот какая есть задача, запросом выбираются данные, а именно, разность двух дат, надо их вывести в красивом виде, ЧЧ:мм:сс

Запрос передается в универсальный отчет и там выводится

Чего только не пробовал, получается какаято фигня.

Через конкатенацию строк нельзя, т.к. там числа и они не преобразовываются, через тип даты тоже никак.
Пробовал вычислять кол-во минут и часов, умножать их на 100 и 10000 и выводить с разделителями, но тоже косяки с расчетами.

например вот так
РАЗНОСТЬДАТ(ВремяПриходаПоставки, ВремяНачалаСканирования, ЧАС) * 10000 + (РАЗНОСТЬДАТ(ВремяПриходаПоставки, ВремяНачалаСканирования, МИНУТА) - РАЗНОСТЬДАТ(ВремяПриходаПоставки, ВремяНачалаСканирования, ЧАС) * 60) * 100 + РАЗНОСТЬДАТ(ВремяПриходаПоставки, ВремяНачалаСканирования, СЕКУНДА) - РАЗНОСТЬДАТ(ВремяПриходаПоставки, ВремяНачалаСканирования, МИНУТА) * 60

но фишка в том, что для 1:30:00 и 2:05:00
РАЗНОСТЬДАТ(ВремяПриходаПоставки, ВремяНачалаСканирования, ЧАС) вернет 1
а РАЗНОСТЬДАТ(ВремяПриходаПоставки, ВремяНачалаСканирования, МИНУТА) вернет 35

Округление не помогает

Если бы я это делал в коде, то можно было бы сделать через остаток от деления.

Нет ли нормального способа это вывести? Голову уже сломал.
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Неопределено 90 12.07.18 02:44 Сейчас в теме
(1)
Через конкатенацию строк нельзя, т.к. там числа и они не преобразовываются

Не преобразовываются в смысле ВЫРАЗИТЬ не работает?
+
4. catena 110 12.07.18 05:13 Сейчас в теме
(3)ВЫРАЗИТЬ - это не преобразование, это типизация.преобразования типов в запросах 1С нет.
Stref75; +1
5. Неопределено 90 12.07.18 05:37 Сейчас в теме
(4) Но проблему конкатенации это должно решить.
+
10. PAAG 12.07.18 10:51 Сейчас в теме
(5) Да, уже выше написали, что она не умеет преобразовывать типы, ни в строку, ни в дату другой тип не преобразовать. Я это попробовал первым делом. :)
+
21. Неопределено 90 13.07.18 02:42 Сейчас в теме
(10) А если так?
ВЫБРАТЬ
	ПОДСТРОКА("0123456789", ДЕНЬ(&Дата1) / 10 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ДЕНЬ(&Дата1))) / 6 + 1, 1) + "/" + ПОДСТРОКА("0123456789", МЕСЯЦ(&Дата1) / 10 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МЕСЯЦ(&Дата1))) / 6 + 1, 1) + "/" + ПОДСТРОКА("0123456789", ГОД(&Дата1) / 1000 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата1) * 0.06)) / 6 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата1) * 0.6)) / 6 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата1) * 6)) / 6 + 1, 1) КАК ДатаСтрокой1,
	ПОДСТРОКА("0123456789", ДЕНЬ(&Дата2) / 10 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ДЕНЬ(&Дата2))) / 6 + 1, 1) + "/" + ПОДСТРОКА("0123456789", МЕСЯЦ(&Дата2) / 10 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МЕСЯЦ(&Дата2))) / 6 + 1, 1) + "/" + ПОДСТРОКА("0123456789", ГОД(&Дата2) / 1000 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата2) * 0.06)) / 6 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата2) * 0.6)) / 6 + 1, 1) + ПОДСТРОКА("0123456789", СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата2) * 6)) / 6 + 1, 1) КАК ДатаСтрокой2
ПОМЕСТИТЬ ВТ_1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_1.ДатаСтрокой1 + ";" + ВТ_1.ДатаСтрокой2 КАК Поле1
ИЗ
	ВТ_1 КАК ВТ_1
Показать
+
20. catena 110 12.07.18 12:51 Сейчас в теме
9. spacecraft 12.07.18 10:47 Сейчас в теме
(1) нужно именно только время? А если несколько дней разница?
Может так устроит?
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, РАЗНОСТЬДАТ(ВремяПриходаПоставки, ВремяНачалаСканирования, СЕКУНДА))
sommid; +1
11. sommid 12.07.18 10:55 Сейчас в теме
(9) так, конечно, красиво, но уже если говорить про дни, тогда дальше вопрос и про месяцы и т.д. - таким способом можем только с помощью Формат() вывести, но при этом, если вдруг значение перевалит за дни при формате ДДЧЧММсс, то пользователь об этом не узнает. Но если в данных 100% такого не получится, то так компактнее и красивее.
+
14. PAAG 12.07.18 11:35 Сейчас в теме
(11) Да, так и есть. Мне пока хватит часов и очень компактно, потому что городить огромные перекрестные таблицы ну уж слишком.
+
13. PAAG 12.07.18 11:31 Сейчас в теме
(9)
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА,

А вот это круто, вполне подошло, т.к. у меня разница только в часах,а нет разницы в днях, то подходит, вот уже для больших интервалов не сработает, т.к. там будет добавляться 1 день, 1 месяц и 1 год.
Спасибо!
+
2. DarkUser 12.07.18 01:28 Сейчас в теме
Может быть поможет Преобразование дат в запросе. Конечно там не совсем ваш случай, но всё же...
+
6. Stref75 12.07.18 07:04 Сейчас в теме
суть - подсчитать секунды, вычислить разность, выделить часы, минуты, секунды и сформировать дату из этих составляющих.
если еще считать разность по дате (не только время) - суть такая же, только обработать нужно дни и месяцы

ВЫБРАТЬ
	&ДатаНачало КАК ДатаНачало,
	&ДатаОкончания КАК ДатаОкончания,
	ДАТАВРЕМЯ(2000, 1, 1, 0, 0, 0) КАК РазностьВремени
ПОМЕСТИТЬ ВТ_ИсходныеДаты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ИсходныеДаты.ДатаНачало КАК ДатаНачало,
	ВТ_ИсходныеДаты.ДатаОкончания КАК ДатаОкончания,
	ВТ_ИсходныеДаты.РазностьВремени КАК РазностьВремени,
	ЧАС(ВТ_ИсходныеДаты.ДатаНачало) * 60 * 60 + МИНУТА(ВТ_ИсходныеДаты.ДатаНачало) * 60 + СЕКУНДА(ВТ_ИсходныеДаты.ДатаНачало) КАК ДатаНачалаВСекундах,
	ЧАС(ВТ_ИсходныеДаты.ДатаОкончания) * 60 * 60 + МИНУТА(ВТ_ИсходныеДаты.ДатаОкончания) * 60 + СЕКУНДА(ВТ_ИсходныеДаты.ДатаОкончания) КАК ДатаОкончаниеВСекундах,
	ЧАС(ВТ_ИсходныеДаты.ДатаОкончания) * 60 * 60 + МИНУТА(ВТ_ИсходныеДаты.ДатаОкончания) * 60 + СЕКУНДА(ВТ_ИсходныеДаты.ДатаОкончания) - (ЧАС(ВТ_ИсходныеДаты.ДатаНачало) * 60 * 60 + МИНУТА(ВТ_ИсходныеДаты.ДатаНачало) * 60 + СЕКУНДА(ВТ_ИсходныеДаты.ДатаНачало)) КАК РазностьСекунд
ПОМЕСТИТЬ ВТ_Составляющие
ИЗ
	ВТ_ИсходныеДаты КАК ВТ_ИсходныеДаты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Составляющие.ДатаНачало КАК ДатаНачало,
	ВТ_Составляющие.ДатаОкончания КАК ДатаОкончания,
	ВТ_Составляющие.РазностьВремени КАК РазностьВремени,
	ВТ_Составляющие.РазностьСекунд КАК РазностьСекунд,
	ВЫБОР
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 0
				И ВТ_Составляющие.РазностьСекунд / 3600 < 1
			ТОГДА 0
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 1
				И ВТ_Составляющие.РазностьСекунд / 3600 < 2
			ТОГДА 1
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 2
				И ВТ_Составляющие.РазностьСекунд / 3600 < 3
			ТОГДА 2
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 3
				И ВТ_Составляющие.РазностьСекунд / 3600 < 4
			ТОГДА 3
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 4
				И ВТ_Составляющие.РазностьСекунд / 3600 < 5
			ТОГДА 4
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 5
				И ВТ_Составляющие.РазностьСекунд / 3600 < 6
			ТОГДА 5
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 6
				И ВТ_Составляющие.РазностьСекунд / 3600 < 7
			ТОГДА 6
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 7
				И ВТ_Составляющие.РазностьСекунд / 3600 < 8
			ТОГДА 7
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 8
				И ВТ_Составляющие.РазностьСекунд / 3600 < 9
			ТОГДА 8
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 9
				И ВТ_Составляющие.РазностьСекунд / 3600 < 10
			ТОГДА 9
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 10
				И ВТ_Составляющие.РазностьСекунд / 3600 < 11
			ТОГДА 10
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 11
				И ВТ_Составляющие.РазностьСекунд / 3600 < 12
			ТОГДА 11
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 12
				И ВТ_Составляющие.РазностьСекунд / 3600 < 13
			ТОГДА 12
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 13
				И ВТ_Составляющие.РазностьСекунд / 3600 < 14
			ТОГДА 13
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 14
				И ВТ_Составляющие.РазностьСекунд / 3600 < 15
			ТОГДА 14
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 15
				И ВТ_Составляющие.РазностьСекунд / 3600 < 16
			ТОГДА 15
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 16
				И ВТ_Составляющие.РазностьСекунд / 3600 < 17
			ТОГДА 16
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 17
				И ВТ_Составляющие.РазностьСекунд / 3600 < 18
			ТОГДА 17
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 18
				И ВТ_Составляющие.РазностьСекунд / 3600 < 19
			ТОГДА 18
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 19
				И ВТ_Составляющие.РазностьСекунд / 3600 < 20
			ТОГДА 19
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 20
				И ВТ_Составляющие.РазностьСекунд / 3600 < 21
			ТОГДА 20
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 21
				И ВТ_Составляющие.РазностьСекунд / 3600 < 22
			ТОГДА 21
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 22
				И ВТ_Составляющие.РазностьСекунд / 3600 < 23
			ТОГДА 22
		КОГДА ВТ_Составляющие.РазностьСекунд / 3600 >= 23
			ТОГДА 23
	КОНЕЦ КАК Часов
ПОМЕСТИТЬ ВТ_Часы
ИЗ
	ВТ_Составляющие КАК ВТ_Составляющие
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Часы.ДатаНачало КАК ДатаНачало,
	ВТ_Часы.ДатаОкончания КАК ДатаОкончания,
	ВТ_Часы.РазностьВремени КАК РазностьВремени,
	ВТ_Часы.РазностьСекунд КАК РазностьСекунд,
	ВТ_Часы.Часов КАК Часов,
	ВЫБОР
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 0
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 1
			ТОГДА 0
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 1
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 2
			ТОГДА 1
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 2
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 3
			ТОГДА 2
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 3
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 4
			ТОГДА 3
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 4
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 5
			ТОГДА 4
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 5
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 6
			ТОГДА 5
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 6
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 7
			ТОГДА 6
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 7
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 8
			ТОГДА 7
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 8
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 9
			ТОГДА 8
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 9
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 10
			ТОГДА 9
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 10
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 11
			ТОГДА 10
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 11
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 12
			ТОГДА 11
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 12
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 13
			ТОГДА 12
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 13
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 14
			ТОГДА 13
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 14
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 15
			ТОГДА 14
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 15
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 16
			ТОГДА 15
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 16
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 17
			ТОГДА 16
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 17
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 18
			ТОГДА 17
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 18
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 19
			ТОГДА 18
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 19
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 20
			ТОГДА 19
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 20
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 21
			ТОГДА 20
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 21
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 22
			ТОГДА 21
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 22
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 23
			ТОГДА 22
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 23
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 24
			ТОГДА 23
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 24
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 25
			ТОГДА 24
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 25
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 26
			ТОГДА 25
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 26
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 27
			ТОГДА 26
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 27
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 28
			ТОГДА 27
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 28
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 29
			ТОГДА 28
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 29
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 30
			ТОГДА 29
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 30
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 31
			ТОГДА 30
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 31
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 32
			ТОГДА 31
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 32
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 33
			ТОГДА 32
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 33
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 34
			ТОГДА 33
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 34
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 35
			ТОГДА 34
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 35
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 36
			ТОГДА 35
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 36
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 37
			ТОГДА 36
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 37
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 38
			ТОГДА 37
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 38
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 39
			ТОГДА 38
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 39
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 40
			ТОГДА 39
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 40
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 41
			ТОГДА 40
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 41
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 42
			ТОГДА 41
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 42
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 43
			ТОГДА 42
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 43
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 44
			ТОГДА 43
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 44
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 45
			ТОГДА 44
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 45
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 46
			ТОГДА 45
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 46
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 47
			ТОГДА 46
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 47
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 48
			ТОГДА 47
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 48
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 49
			ТОГДА 48
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 49
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 50
			ТОГДА 49
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 50
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 51
			ТОГДА 50
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 51
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 52
			ТОГДА 51
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 52
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 53
			ТОГДА 52
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 53
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 54
			ТОГДА 53
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 54
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 55
			ТОГДА 54
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 55
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 56
			ТОГДА 55
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 56
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 57
			ТОГДА 56
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 57
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 58
			ТОГДА 57
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 58
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 59
			ТОГДА 58
		КОГДА (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 >= 59
				И (ВТ_Часы.РазностьСекунд - ВТ_Часы.Часов * 3600) / 60 < 60
			ТОГДА 59
	КОНЕЦ КАК Минут
ПОМЕСТИТЬ ВТ_Часов_Минут
ИЗ
	ВТ_Часы КАК ВТ_Часы
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Часов_Минут.ДатаНачало КАК ДатаНачало,
	ВТ_Часов_Минут.ДатаОкончания КАК ДатаОкончания,
	ВТ_Часов_Минут.РазностьВремени КАК РазностьВремени,
	ВТ_Часов_Минут.РазностьСекунд КАК РазностьСекунд,
	ВТ_Часов_Минут.Часов КАК Часов,
	ВТ_Часов_Минут.Минут КАК Минут,
	ВТ_Часов_Минут.РазностьСекунд - ВТ_Часов_Минут.Часов * 3600 - ВТ_Часов_Минут.Минут * 60 КАК Секунд
ПОМЕСТИТЬ ВТ_Часы_Минуты_Секунды
ИЗ
	ВТ_Часов_Минут КАК ВТ_Часов_Минут
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Часы_Минуты_Секунды.ДатаНачало КАК ДатаНачало,
	ВТ_Часы_Минуты_Секунды.ДатаОкончания КАК ДатаОкончания,
	ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ВТ_Часы_Минуты_Секунды.РазностьВремени, ЧАС, ВТ_Часы_Минуты_Секунды.Часов), МИНУТА, ВТ_Часы_Минуты_Секунды.Минут), СЕКУНДА, ВТ_Часы_Минуты_Секунды.Секунд) КАК РазностьВремени
ИЗ
	ВТ_Часы_Минуты_Секунды КАК ВТ_Часы_Минуты_Секунды
Показать
Прикрепленные файлы:
+
17. PAAG 12.07.18 11:38 Сейчас в теме
(6) ого, вот это да, ну очень громоздко. Не стал пробовать это прикрутить к моему запросу, т.к. нашел более простой способ выше.
А вообще такая штука проканает, если даты задаются не параметрами, как у Вас, а выбираются из результатов запроса, т.е. у меня их много и все разные.
+
7. mad375 12.07.18 10:18 Сейчас в теме
Боюсь показаться бестактным, но, используйте СКД, все тоже самое только в 10раз проще.... и форматы и перобразования и использование функций конфигурации
+
8. sommid 12.07.18 10:18 Сейчас в теме
в СКД так делал:
(ВЫРАЗИТЬ(ВЫБОР
			КОГДА ИсторияПриемкиКоробов.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
					ИЛИ ИсторияПриемкиКоробов.ДатаНачала = ДАТАВРЕМЯ(1, 1, 1)
				ТОГДА 0
			ИНАЧЕ РАЗНОСТЬДАТ(ИсторияПриемкиКоробов.ДатаНачала, ИсторияПриемкиКоробов.ДатаОкончания, СЕКУНДА)
		КОНЕЦ / 3600 КАК ЧИСЛО(10, 0))) - ВЫБОР
		КОГДА МИНУТА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ВЫБОР
						КОГДА ИсторияПриемкиКоробов.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
								ИЛИ ИсторияПриемкиКоробов.ДатаНачала = ДАТАВРЕМЯ(1, 1, 1)
							ТОГДА 0
						ИНАЧЕ РАЗНОСТЬДАТ(ИсторияПриемкиКоробов.ДатаНачала, ИсторияПриемкиКоробов.ДатаОкончания, СЕКУНДА)
					КОНЕЦ)) >= 30
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК Часов,
	ВЫРАЗИТЬ((ВЫБОР
			КОГДА ИсторияПриемкиКоробов.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
					ИЛИ ИсторияПриемкиКоробов.ДатаНачала = ДАТАВРЕМЯ(1, 1, 1)
				ТОГДА 0
			ИНАЧЕ РАЗНОСТЬДАТ(ИсторияПриемкиКоробов.ДатаНачала, ИсторияПриемкиКоробов.ДатаОкончания, СЕКУНДА)
		КОНЕЦ - ((ВЫРАЗИТЬ(ВЫБОР
				КОГДА ИсторияПриемкиКоробов.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
						ИЛИ ИсторияПриемкиКоробов.ДатаНачала = ДАТАВРЕМЯ(1, 1, 1)
					ТОГДА 0
				ИНАЧЕ РАЗНОСТЬДАТ(ИсторияПриемкиКоробов.ДатаНачала, ИсторияПриемкиКоробов.ДатаОкончания, СЕКУНДА)
			КОНЕЦ / 3600 КАК ЧИСЛО(10, 0))) - ВЫБОР
			КОГДА МИНУТА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ВЫБОР
							КОГДА ИсторияПриемкиКоробов.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
									ИЛИ ИсторияПриемкиКоробов.ДатаНачала = ДАТАВРЕМЯ(1, 1, 1)
								ТОГДА 0
							ИНАЧЕ РАЗНОСТЬДАТ(ИсторияПриемкиКоробов.ДатаНачала, ИсторияПриемкиКоробов.ДатаОкончания, СЕКУНДА)
						КОНЕЦ)) >= 30
				ТОГДА 1
			ИНАЧЕ 0
		КОНЕЦ) * 3600) / 60 КАК ЧИСЛО(3, 0)) КАК Минут
Показать

а в вычисляемых полях уже
Строка(Часов) + " ч " + Строка(Минут) + " мин"
Stref75; +1
16. PAAG 12.07.18 11:36 Сейчас в теме
(8) Да, тут логика понятна и СКД, конечно, сильно упрощает жизнь.
+
12. herfis 498 12.07.18 10:58 Сейчас в теме
Непосредственно в запросе многие задачи представления данных красиво не решаются. Не для того оно.
Пост-обработкой легко. Красиво многие задачи пост-обработки в СКД реализованы.
+
15. PAAG 12.07.18 11:35 Сейчас в теме
(12) Да, если бы была постобработка, проблем бы не было.
+
19. herfis 498 12.07.18 11:38 Сейчас в теме
(15) Переходи на СКД :) Я УФ чисто из-за красивой и легкой отчетности на них начал использовать в затертые года. Включил в толстом клиенте использование УФ и всю новую отчетность ваял уже на УФ+СКД. Тем легче было потом переносить функциональность.
+
18. PAAG 12.07.18 11:38 Сейчас в теме
Спасибо всем, кто откликнулся. Приятно общаться с профессионалами!
+
Внимание! Тема сдана в архив

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