Имя: Пароль:
1C
 
Как реализовать расчет итогов продолжительности выполнения работ
0 Aleksey1989
 
30.11.15
11:07
Добрый день. Подскажите, пжл, можно ли с помощью скд реализовать следующее. Есть регистр сведений, в который записывается продолжительность выполнения различных операций, при чем запись происходит в 3 колонки "ЗатраченоЧасов", "ЗатраченоМинут", "ЗатраченоСекунд". В этом регистре есть измерение "Рабочий" и "ВидРабот". Мне нужно получить отчет, из которого можно понять, сколько времени тратит рабочий, при этом д.б. группировка по измерению "Рабочий" и "ВидРабот".

Проблема заключается в том, что если говорить про одиночную запись регистра, то там продолжительность выполнения работы указана корректно, т.е. если работа занимает 1 час 10 минут 20 сек, то там так и будет указано. Но когда я строю отчет с помощью скд, то у меня считаются итоги по полям "ЗатраченоЧасов", "ЗатраченоМинут" и "ЗатраченоСекунд", в результате чего для рабочего могут быть получены следующие итоги: 3 часа 87 минут 5123 секунд, а хотелось бы, чтобы общая продолжительность корректно показывалась.
1 Господин ПЖ
 
30.11.15
11:09
>3 часа 87 минут 5123 секунд

проектировать надо структуру РС нормально
2 Горогуля
 
30.11.15
11:09
выкини  "ЗатраченоЧасов", "ЗатраченоМинут" и наслаждайся
3 Господин ПЖ
 
30.11.15
11:10
или для вас посчитать кол-во дней/часов/минус/секунд из секунд - это непосильная задача?
4 Лефмихалыч
 
30.11.15
11:10
кривой регистр, по этому и плохо выходит.

А вообще, всмопни начальную школу - тебе надо сложить три обычных дроби с разными делителями, как это делается?
5 Aleksey1989
 
30.11.15
11:11
(1) нормально это как? Вместо 3-х реквизитов (часы, минуты, секунды) сделать один - "продолжительность" с типом "Дата"? Будут ли по дате рассчитываться итоги?
6 Лефмихалыч
 
30.11.15
11:12
(5) нормально - это хранить время в одном поле
7 ale-sarin
 
30.11.15
11:12
(5) С типом "число". И хранить там "всего секунд".
8 Aleksey1989
 
30.11.15
11:12
(3) Задача, конечно же, посильная, но я не знаю, как эти значения потом в отчете в итогах показать.
9 Лефмихалыч
 
30.11.15
11:12
(7) всю интригу запорол
10 ale-sarin
 
30.11.15
11:13
(9) Извините))) Жалею иногда...
11 aleks_default
 
30.11.15
11:20
(9)А может регитстр еще и периодический? Тогда еще ничего не закончилось:)
12 Горогуля
 
30.11.15
11:21
кстати, да. при чём тут сведения?
13 ИУБиПовиц
 
30.11.15
11:27
Можно как то так извратиться:) Результат запроса выгрузить в тз и потом В СКД делать запрос к этой тз:)
ЧАсов = 3;
    Минут = 87;
    Секунди = 2123;
    
    
    Пока Секунди > 60 цикл
        
        Секунди = Секунди - 60;
        Минут = Минут + 1;
        
    КонецЦикла;
    
    Пока Минут > 60 цикл
        
        Минут = Минут - 60;
        Часов = ЧАсов+ 1;
        
    КонецЦикла;
    
    Сообщить(ЧАсов);
    Сообщить(Минут);
    Сообщить(Секунди);
14 Горогуля
 
30.11.15
11:28
(13) складывать и делить не научился?
15 ИУБиПовиц
 
30.11.15
11:30
(14)дык не интересно ж :)
16 ИУБиПовиц
 
30.11.15
11:32
И что складывать и делить, что бы получить 5 часов 2 минуты и 23 секунды надо?
17 Горогуля
 
30.11.15
11:34
(16) перевести часы, минуты и секунды в секунды, тщательно поделить три раза
18 Aleksey1989
 
30.11.15
11:42
Пока придумал следующее: вместо трех реквизитов (часы, минуты, секунды) ограничился одним - секунды, по этому реквизиту в скд считаю итоги и итоги рассчитываются по функции общего модуля, которую я специально создал:

Функция ПеревестиПродолжительностьвСтроку(КолВоСек) Экспорт

    КоличествоЧасов=Цел(КолВоСек/3600);
    КоличествоМинут = Цел(КолВоСек/60) - КоличествоЧасов*60;
    КоличествоСекунд = КолВоСек - КоличествоЧасов*3600 - КоличествоМинут*60;
    
    Если КоличествоЧасов >0 Тогда
        Результат = Строка (КоличествоЧасов) +":" + Строка(КоличествоМинут) + ":" + Строка(КоличествоСекунд);
    Иначе
        Результат = "00:" + Строка(КоличествоМинут) + ":" + Строка(КоличествоСекунд);
    КонецЕсли;    
        
    Возврат Результат

    

КонецФункции

Итоги по видам работ правильно считаются, но вот итоги по конкретному рабочему непонятно, как считаются, например:

Рабочий                     Затрачено времени  
Иванов А.А.                 00:00:15
    "Подготовка документов" 00:00:55  
    "Отправка документов"   00:00:15

Т.е. в итоги по конкретному рабочему встает время выполнения его последней работы.
19 Горогуля
 
30.11.15
11:44
а не хочешь засуммировать свои секунды?
20 Aleksey1989
 
30.11.15
11:46
(19) хочу, но сначала мне нужно засуммировать секунды по виду работы, а потом в целом по рабочему.
21 aleks_default
 
30.11.15
11:53
"итоги рассчитываются по функции общего модуля, которую я специально создал"
Ты эту свою функцию не в расчет ресурсов в СКД вставь, а в выражение представления. Расчет итогов пусть стандартно секунды числом считает.
22 Aleksey1989
 
30.11.15
12:01
(21) Если в выражение представления эту функцию установить, то итоги будут по общему количеству секунд рассчитываться, а не по моей функции.
23 Горогуля
 
30.11.15
12:03
(22) что тебе и нужно
24 Aleksey1989
 
30.11.15
12:12
(23) Нет, я неправильно выразился - согласно моей функции итоги должны переводиться в строку вида чч:мм:сс, а если разместить ссылку на эту функцию в ПредставлениеВыражения, то итоги будут считаться в секундах, т.е. в общем количестве секунд.
25 Горогуля
 
30.11.15
12:17
представление выражения как-то влияет на вычисление итогов. внеазпно как-то
26 Aleksey1989
 
30.11.15
12:21
Разобрался - я неправильно параметр в свою функцию передавал - я передавал просто значение реквизита, а надо было передавать СУММА(ЗначениеРеквизита), и эту формулу я указывал именно для ресурсов, а не в выраженииПредставления во вкладке "НаборыДанных".
27 Горогуля
 
30.11.15
12:23
не за что
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.