1. PAAG 12.07.18 01:07 Сейчас в теме

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

Всем привет!
Вот какая есть задача, запросом выбираются данные, а именно, разность двух дат, надо их вывести в красивом виде, ЧЧ:мм:сс

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

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

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

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

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

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

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

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

Не преобразовываются в смысле ВЫРАЗИТЬ не работает?
4. catena 98 12.07.18 05:13 Сейчас в теме
(3)ВЫРАЗИТЬ - это не преобразование, это типизация.преобразования типов в запросах 1С нет.
5. Неопределено 12.07.18 05:37 Сейчас в теме
(4) Но проблему конкатенации это должно решить.
10. PAAG 12.07.18 10:51 Сейчас в теме
(5) Да, уже выше написали, что она не умеет преобразовывать типы, ни в строку, ни в дату другой тип не преобразовать. Я это попробовал первым делом. :)
21. Неопределено 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 98 12.07.18 12:51 Сейчас в теме
9. spacecraft 12.07.18 10:47 Сейчас в теме
(1) нужно именно только время? А если несколько дней разница?
Может так устроит?
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 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)) КАК Минут
Показать

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

Вакансии

Программист 1С
Москва
зарплата от 120 000 руб. до 130 000 руб.
Полный день

Программист 1С
Санкт-Петербург
Полный день

Бизнес-аналитик 1С ERP
Пермь
зарплата от 80 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С УТ 11
Омск
зарплата от 60 000 руб.
Полный день