Есть отчет в котором отображается время цикла производства, сейчас время отображается в формате 25,5 (т.е. 25 часов 30 минут). Вопрос: как сделать отображение в отчете в формате времени?
Например 25.5 -> 25:30.
Варианты с преобразованию к типу Дата не подходят т.к. часы >24 будут превращаться в дни, а это не нужно. Пока пробую расчитывать часы и минуты отдельно и склеивать их как строки, но в СКД это проблемно.
Например 25.5 -> 25:30.
Варианты с преобразованию к типу Дата не подходят т.к. часы >24 будут превращаться в дни, а это не нужно. Пока пробую расчитывать часы и минуты отдельно и склеивать их как строки, но в СКД это проблемно.
По теме из базы знаний
- Шаблон отчета на СКД с сохранением настроек
- Установка собственных значений полей при программном выводе отчета СКД по имени поля (по принципу "как в макете")
- Три способа создания одного отчета на СКД
- Программная корректировка при выводе отчета СКД
- Отбор/фильтр в отчетах/СКД/обработках 1C: БП, УТ, ERP, Кронос: WMS по файлу Excel, текстовому файлу или списку текстовых строк (номер документа, артикул, ИНН, QR-код, штрих-код, наименование)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) fnxash,
преобразуй поле к типу дата и задай формат поля в настройках его оформления.
аналог в коде 1С (не в языке запросе) выглядит примерно так
как вычислить в запроса
выражение вроде '0001-01-01'+ВремяСек
думаю сообразишь
преобразуй поле к типу дата и задай формат поля в настройках его оформления.
аналог в коде 1С (не в языке запросе) выглядит примерно так
Формат('0001-01-01'+ВремяСек, "ДЛФ=В; ДП=00:00:00")
как вычислить в запроса
выражение вроде '0001-01-01'+ВремяСек
думаю сообразишь
Решил вопрос.
Если кому интересно то получилось так:
1. В общем модуле добавил функцию преобразования числа в строку времени.
2. Добавил в настройках макета СКД макет поля отчета, в нем параметр. Для расчета параметра указал функцию из общего модуля.
3. Аналогично п.2 сделал макет итогов отчета.
Если кому интересно то получилось так:
1. В общем модуле добавил функцию преобразования числа в строку времени.
2. Добавил в настройках макета СКД макет поля отчета, в нем параметр. Для расчета параметра указал функцию из общего модуля.
3. Аналогично п.2 сделал макет итогов отчета.
(11)
Можно считать сразу в выражении ресурса
Если сделать вычисляемое поле то по такому полю не будут считаться итоги т.к. оно содержит строку, а если через макет то итоги корректно будут отображаться.
Можно считать сразу в выражении ресурса
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Формат(Цел(Сумма(Часы)), ""ЧН=00"") + "":"" + Формат(ОКР(60* (Сумма(Часы) - Цел(Сумма(Часы))), 0), ""ЧЦ=2; ЧН = 00"") ")
аналогично сделал через функцию в общем модуле и выражение представления в макете СКД (мне надо Минуты вывести в формате Часы:минуты).
Функция ПреобразоватьЧислоМинутВЧасыМинуты(ЧислоМинут,СтрокаВремяНоль="") Экспорт
Если ЧислоМинут>0 Тогда
ЧислоЧасов=Цел(ЧислоМинут / 60);
Возврат Прав("00"+Строка(ЧислоЧасов),Макс(2,СтрДлина(Строка(ЧислоЧасов)))) + ":" + Прав("00"+Строка(ЧислоМинут - ЧислоЧасов * 60),2);
Иначе
Возврат СтрокаВремяНоль;
КонецЕсли;
КонецФункции
В самом запросе:
У меня отрабатывает идеально.
ВЫБОР
КОГДА (ВЫРАЗИТЬ(РеквизитСВременем/ 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)))
ПоказатьУ меня отрабатывает идеально.
ВЫБОР КОГДА РеквизитСВременем <> 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, то пишет, что "не опаздывал", Реквизит со временем естественно в секундах изначально.
Ещё можно, решить вот так, если нужен формат Часы:Минуты:Секунды
Добавляем в СКД макет поля, в выражении пишем следующее:
Цел(ВремяВСекундах/3600)*100+(Цел(ВремяВСекундах/60)-Цел(ВремяВСекундах/3600)*60)+(ВремяВСекундах-Цел(ВремяВСекундах/60)*60)/100
Форматная строка в ячейке макета: ЧДЦ=2; ЧРД=:; ЧРГ=:; ЧГ=2,5,0
458566 секунд превращаются в 127:22:46
Добавляем в СКД макет поля, в выражении пишем следующее:
Цел(ВремяВСекундах/3600)*100+(Цел(ВремяВСекундах/60)-Цел(ВремяВСекундах/3600)*60)+(ВремяВСекундах-Цел(ВремяВСекундах/60)*60)/100
Форматная строка в ячейке макета: ЧДЦ=2; ЧРД=:; ЧРГ=:; ЧГ=2,5,0
458566 секунд превращаются в 127:22:46
Почти то же самое, но в выражении ресурса: (Секунды - это время в секундах посчитанное в запросе)
в таком случае итоги нормально считаются по любой группировке.
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Формат(Цел(Сумма(Секунды)/3600), ""ЧЦ=2;ЧВН=;ЧН=00"")
+ "":""
+ Формат(Цел((Сумма(Секунды) - Цел(Сумма(Секунды)/3600)*3600)/60), ""ЧЦ=2;ЧВН=;ЧН=00"")
+ "":""
+ Формат(Сумма(Секунды) - (Цел(Сумма(Секунды)/60)*60), ""ЧЦ=2;ЧВН=;ЧН=00"") ")
в таком случае итоги нормально считаются по любой группировке.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот