Число -> Время в отчете на СКД

1. fnxash 31.01.14 10:05 Сейчас в теме
Есть отчет в котором отображается время цикла производства, сейчас время отображается в формате 25,5 (т.е. 25 часов 30 минут). Вопрос: как сделать отображение в отчете в формате времени?

Например 25.5 -> 25:30.

Варианты с преобразованию к типу Дата не подходят т.к. часы >24 будут превращаться в дни, а это не нужно. Пока пробую расчитывать часы и минуты отдельно и склеивать их как строки, но в СКД это проблемно.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Rothschild 31.01.14 10:22 Сейчас в теме
(1) fnxash,
преобразуй поле к типу дата и задай формат поля в настройках его оформления.

аналог в коде 1С (не в языке запросе) выглядит примерно так
Формат('0001-01-01'+ВремяСек, "ДЛФ=В; ДП=00:00:00")


как вычислить в запроса
выражение вроде '0001-01-01'+ВремяСек
думаю сообразишь
4. fnxash 31.01.14 10:26 Сейчас в теме
(3) Rothschild, в этом случае 25.5 превратится в 01:30:00
Варианты с преобразованию к типу Дата не подходят т.к. часы >24 будут превращаться в дни, а это не нужно
5. Rothschild 31.01.14 10:37 Сейчас в теме
(4) fnxash,
ну есть и другие форматы у даты
;)
6. Rothschild 31.01.14 10:40 Сейчас в теме
(5)
тебе в каком формате нужно время в 24-часовом надо полагать?
или в 12-часовом ???
7. Rothschild 31.01.14 10:44 Сейчас в теме
(6)
вот два - на выбор:
"ДФ=ЧЧ:ММ" - 24-часовой с выводом лидирующих нулей
"ДФ=чч:мм" - тоже самое, но в 12-часовом формате
8. fnxash 31.01.14 10:46 Сейчас в теме
(6) Rothschild, мне не нужно время в формате, мне нужно количество потраченных часов в формате:
<количество часов>:<количество минут>
На производство потратили 45,33 часа, отображаться должно "45:20" (вопрос округления минут пока опустим)
2. lirsi 31.01.14 10:13 Сейчас в теме
Попробуйте сделать через "Вычисляемые поля". В поле "Выражение" впишите алгоритм перевода из числа в дату
9. fnxash 31.01.14 12:44 Сейчас в теме
Решил вопрос.
Если кому интересно то получилось так:
1. В общем модуле добавил функцию преобразования числа в строку времени.
2. Добавил в настройках макета СКД макет поля отчета, в нем параметр. Для расчета параметра указал функцию из общего модуля.
3. Аналогично п.2 сделал макет итогов отчета.
Mahon83; ui69; ITEkb; Rothschild; +4 Ответить
10. Rothschild 31.01.14 14:47 Сейчас в теме
(9) fnxash,
ну если на то пошло,
можно в запросе добавить поля "времячасы" и "времяминуты"
а затем сделать вычисимое поле, используюшее функцию Формат():
Формат(времячасы,"ЧЦ=2; ЧДЦ=0; ЧН=; ЧВН=") + ":" + Формат(времяминуты,"ЧЦ=2; ЧДЦ=0; ЧН=; ЧВН=")
12. ITEkb 06.07.15 15:46 Сейчас в теме
(9) fnxash, Дружище, ты гениален! Выручил! Твой способ избавил от проблем со временем в отчете. Приезжай в ЕКБ, наши бухгалтера тебя расцелуют :-)
11. fnxash 03.02.14 11:38 Сейчас в теме
Если сделать вычисляемое поле то по такому полю не будут считаться итоги т.к. оно содержит строку, а если через макет то итоги корректно будут отображаться.
17. mivari 20.02.18 01:06 Сейчас в теме
(11)
Если сделать вычисляемое поле то по такому полю не будут считаться итоги т.к. оно содержит строку, а если через макет то итоги корректно будут отображаться.


Можно считать сразу в выражении ресурса
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Формат(Цел(Сумма(Часы)), ""ЧН=00"") + "":"" + Формат(ОКР(60* (Сумма(Часы) - Цел(Сумма(Часы))), 0), ""ЧЦ=2; ЧН = 00"") ")
Lapa009; Mahon83; Babylka; it_tungus; +4 Ответить
13. kudim 07.06.16 15:19 Сейчас в теме
аналогично сделал через функцию в общем модуле и выражение представления в макете СКД (мне надо Минуты вывести в формате Часы:минуты).

Функция ПреобразоватьЧислоМинутВЧасыМинуты(ЧислоМинут,СтрокаВремяНоль="") Экспорт
	Если ЧислоМинут>0 Тогда
	    ЧислоЧасов=Цел(ЧислоМинут / 60);
	    Возврат Прав("00"+Строка(ЧислоЧасов),Макс(2,СтрДлина(Строка(ЧислоЧасов)))) + ":" + Прав("00"+Строка(ЧислоМинут - ЧислоЧасов * 60),2); 
	Иначе	
	    Возврат СтрокаВремяНоль;
	КонецЕсли;
КонецФункции
16. fixin 4253 20.02.18 00:15 Сейчас в теме
(13) (9) спасибо, пригодилось. Только для итогов пришлось писать функцию прямо в ресурсе, а для детальных записей - в представлении поля.
14. imelanyone 05.12.16 15:03 Сейчас в теме
В самом запросе:

ВЫБОР
	КОГДА (ВЫРАЗИТЬ(РеквизитСВременем/ 3600 КАК ЧИСЛО(15, 0))) - РеквизитСВременем/ 3600 > 0
		ТОГДА (ВЫРАЗИТЬ(РеквизитСВременем / 3600 КАК ЧИСЛО(15, 0))) - 1
	ИНАЧЕ ВЫРАЗИТЬ(РеквизитСВременем/ 3600 КАК ЧИСЛО(15, 0))
КОНЕЦ + (ВЫРАЗИТЬ(ВЫБОР
		КОГДА (ВЫРАЗИТЬ(РеквизитСВременем / 3600 КАК ЧИСЛО(15, 0))) - РеквизитСВременем/ 3600 > 0
			ТОГДА РеквизитСВременем / 3600 - ((ВЫРАЗИТЬ(РеквизитСВременем/ 3600 КАК ЧИСЛО(15, 0))) - 1)
		ИНАЧЕ РеквизитСВременем / 3600 - (ВЫРАЗИТЬ(РеквизитСВременем / 3600 КАК ЧИСЛО(15, 0)))
	КОНЕЦ * 60 / 100 КАК ЧИСЛО(15, 2)))
Показать


У меня отрабатывает идеально.
lenchik_chik; +1 Ответить
15. Demian888 32 27.04.17 14:58 Сейчас в теме
ВЫБОР КОГДА РеквизитСВременем <> 0 ТОГДА СТРОКА(ВЫБОР
    КОГДА (ВЫРАЗИТЬ(РеквизитСВременем/ 3600, "ЧИСЛО(15, 0)")) - РеквизитСВременем/ 3600 > 0
        ТОГДА (ВЫРАЗИТЬ(РеквизитСВременем/ 3600, "ЧИСЛО(15, 0)")) - 1
    ИНАЧЕ ВЫРАЗИТЬ(РеквизитСВременем/ 3600, "ЧИСЛО(15, 0)")
КОНЕЦ) + " ч " +
СТРОКА(ФОРМАТ(ВЫРАЗИТЬ(ВЫБОР
        КОГДА (ВЫРАЗИТЬ(РеквизитСВременем/ 3600, "ЧИСЛО(15, 0)")) - РеквизитСВременем/ 3600 > 0
            ТОГДА РеквизитСВременем/ 3600 - ((ВЫРАЗИТЬ(РеквизитСВременем/ 3600, "ЧИСЛО(15, 0)")) - 1)
        ИНАЧЕ РеквизитСВременем/ 3600 - (ВЫРАЗИТЬ(РеквизитСВременем/ 3600, "ЧИСЛО(15, 0)"))
    КОНЕЦ * 60 / 100, "ЧИСЛО(15, 2)"),"ЧС=-2")+" мин")
ИНАЧЕ "Не опаздывал" КОНЕЦ
Показать


Спасибо за код выше, я его немного доработал и теперь в ресурсах показывает как " 5 ч 15 мин", а если реквизит 0, то пишет, что "не опаздывал", Реквизит со временем естественно в секундах изначально.
18. opkc 12.12.18 07:15 Сейчас в теме
Ещё можно, решить вот так, если нужен формат Часы:Минуты:Секунды

Добавляем в СКД макет поля, в выражении пишем следующее:

Цел(ВремяВСекундах/3600)*100+(Цел(ВремяВСекундах/60)-Цел(ВремяВСекундах/3600)*60)+(ВремяВСекундах-Цел(ВремяВСекундах/60)*60)/100

Форматная строка в ячейке макета: ЧДЦ=2; ЧРД=:; ЧРГ=:; ЧГ=2,5,0

458566 секунд превращаются в 127:22:46
romankoav; e-9; SotNick; lenchik_chik; mr_larionov; +5 Ответить
19. kudim 09.08.19 11:28 Сейчас в теме
Почти то же самое, но в выражении ресурса: (Секунды - это время в секундах посчитанное в запросе)

ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Формат(Цел(Сумма(Секунды)/3600), ""ЧЦ=2;ЧВН=;ЧН=00"") 
+ "":"" 
+ Формат(Цел((Сумма(Секунды) - Цел(Сумма(Секунды)/3600)*3600)/60), ""ЧЦ=2;ЧВН=;ЧН=00"") 
+ "":"" 
+ Формат(Сумма(Секунды) - (Цел(Сумма(Секунды)/60)*60), ""ЧЦ=2;ЧВН=;ЧН=00"")  ")


в таком случае итоги нормально считаются по любой группировке.
AlexKoso; rolin555; denmon88; ПодводныйТ; user1302843; Mahon83; coolek; +7 Ответить
Оставьте свое сообщение

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