Имя: Пароль:
1C
1С v8
получить количество часов и минут из начальной даты и конечной бухгалтерия 3.0
,
0 Новый1сник2
 
05.12.22
14:29
Добрый день!

использую функцию

Функция РазностьВремени(Время1, Время2);
    
    Разность = Время1 - Время2;
    
    Если Разность > 0 Тогда
        Часов = Цел(Разность / 3600);
        Минут = Цел((Разность - Часов * 3600) / 60);
        
        Возврат Дата(1, 1, 1, Часов, Минут, 0);
        
    Иначе
        Возврат Дата(1,1,1,0,0,0);
    КонецЕсли;
    
КонецФункции

пишет ошибку Преобразование значения к типу Дата не может быть выполнено  Возврат Дата(1, 1, 1, Часов, Минут, 0);,
хотя в отладчике часы и минуты показывает правильно.

подскажите в чем причина, нужно заполнять отработанное время в отдельный реквизит и потом суммировать его по документам.
1 mikecool
 
05.12.22
14:30
Возврат Дата(1, 1, 1) + Часов * 3600 + Минут * 60;
2 mikecool
 
05.12.22
14:31
а вообще
Возврат Дата(1, 1, 1) + Разность
3 Волшебник
 
модератор
05.12.22
14:42
Возврат Новый Структура("Часы, Минуты", Часы, Минуты);
4 Новый1сник2
 
05.12.22
14:43
немного не правильно считает
например дата начала 19.12.2022  0:00:00 дата окончания 31.12.2022  0:00:00
количество часов 288
а (1) возвращает 13.01.0001  0:00:00
5 Волшебник
 
модератор
05.12.22
14:46
(4) Функция РазностьВремени должна возвращать не дату.
6 1Сергей
 
05.12.22
14:46
(4) Если Вам нужно в часах измерять, то просто умножьте общее количество секунд на 3600
7 1Сергей
 
05.12.22
14:47
(6) *разделите, конечно
8 Новый1сник2
 
05.12.22
14:51
(5) я так понял количество дней возвращает а не дату
9 Ryzeman
 
05.12.22
14:52
(4) Ты хочешь из 31.12.2022 вычесть 19.12.2022 и получить что? Результат какой должен быть?)
10 Kassern
 
05.12.22
14:53
(0) Сделайте уже через запрос и РазностьДат
11 Ryzeman
 
05.12.22
14:53
(8) Количество дней
12 Ryzeman
 
05.12.22
14:53
Это

 Дней= Цел(Разность / 60 * 60 * 24);
13 Ryzeman
 
05.12.22
14:54
(10) Тоже хотел написать что я бы через запрос сделал, тем более там бухия, по-любому ещё производственные календарь потом прикручивать и учитывать нерабочие дни) Но тут какая то мутная тема с переводом разницы в дату)
14 Новый1сник2
 
05.12.22
14:55
(8) нужен реквизит в котором будут сохраняться количество часов и минут. в результате нужно будет суммировать затраченное время по документам.
15 Новый1сник2
 
05.12.22
14:56
(13) не производственных и прочее не нужно. только итог по месяцу посчитать, сколько часов и минут сотрудник отработал
16 Ryzeman
 
05.12.22
14:57
(14) Ты уже получил часы и минуты. Зачем это

Возврат Дата(1, 1, 1, Часов, Минут, 0);

??
17 1Сергей
 
05.12.22
14:58
(16) ему разницу надо
18 Волшебник
 
модератор
05.12.22
14:59
(17) Если надо разницу, то надо возвращать разницу, а не дату.
19 Ryzeman
 
05.12.22
15:00
(17) Ага, он уже получил часы и минуты. Пусть возвращает структуру, либо возвращает секунды, суммирует (если он это в цикле всё делает), а потом уже переводит в минуты и часы
20 Новый1сник2
 
05.12.22
15:01
(19) цикла нету
21 Новый1сник2
 
05.12.22
15:02
а разницу я могу потом сложить и разделить, чтобы получить количество часов, минут?
22 Ryzeman
 
05.12.22
15:03
(21) Конечно, кто тебе мешает? Это же, блин, просто числа, переменные.
23 Kassern
 
05.12.22
15:03
(15) А сотрудник у вас 24/7 работает? Если нет, то нужно учитывать выходные, праздники, рабочее время, обед и т.д.
24 Волшебник
 
модератор
05.12.22
15:04
(23) Ну начинается...
25 Новый1сник2
 
05.12.22
15:05
(23) это для управленческого учета, праздники и прочее по договоренности с сотрудником
26 Kassern
 
05.12.22
15:07
(25) Так я про управленческий учет и говорю. Или вы в цикле только рабочие дни обходите, а в Время1, Время2 - у вас рабочее время сотрудника? Он у вас без обеда?(
27 Новый1сник2
 
05.12.22
15:07
(22) т.е просто храню в числовом реквизите разницу, на конец месяца суммирую, а дальше
Часов = Цел(Разница/ 3600);
Минут = Цел((Разница- Часов * 3600) / 60);
28 Новый1сник2
 
05.12.22
15:09
(26) да что вы за сотрудников беспокоитесь, все норм. часы за сделанную работу проставляются
29 Kassern
 
05.12.22
15:09
(27) Жестоко...
А почему не - Минут = Цел(Разница/60); ?)
30 Ryzeman
 
05.12.22
15:10
(27) Не обижайся, но даже одной лишь формулировкой постановки вопроса кажется что там какая-то адская дичь, одобрять которую ни в коем случае нельзя) Но в целом да - если тебе так будет проще чем с той же структурой - вне этой функции запоминай секунды, а перед выводом вычисляй минуты и часы.
31 Kassern
 
05.12.22
15:12
(28) У вас может быть в параметрах Время1, Время2 - например 1 день разницы? Если да, тогда сотрудник 86400сек отработал? Или все же за этот день от отработал 8часов=28800сек?
32 Новый1сник2
 
05.12.22
15:12
(30) в печатную форму вывожу просто числовой реквизит (количество часов + "0.КоличествоМинут)
33 Kassern
 
05.12.22
15:13
(32) Вот будет весело, если часов 10 получится))
34 Ryzeman
 
05.12.22
15:13
(31) Я так подозреваю что там что там внутри документов реквизиты даты начала и окончания смены.
35 Новый1сник2
 
05.12.22
15:14
(31) если заказ делается более чем один день, то и в т.ч несколько строк с датой начала и датой окончания. по ночам не работают))
36 Новый1сник2
 
05.12.22
15:15
(34) нет там просто почасовая оплата + может оклад и премия
37 Новый1сник2
 
05.12.22
15:15
табель рабочего времени не ведется, если Вы об этом
38 Новый1сник2
 
05.12.22
15:16
(33) может и получится, лишь бы правильно считало
39 Kassern
 
05.12.22
15:18
(35) (35) Тогда -
Разница = Время2-Время1;
Часы=Цел(Разница/3600);
Минуты=Цел(Разница/60);
40 Kassern
 
05.12.22
15:21
(35) (35) Тогда -
Разница = Время2-Время1;
Часы=Цел(Разница/3600);
Минуты=Цел((Разница-Часы*3600)/60);
41 Новый1сник2
 
05.12.22
15:23
благодарю за подсказки, вроде разобрался
42 Новый1сник2
 
06.12.22
10:54
вывожу отчет на скд в кросс таблицу , пишет не верные параметры "+"
в вычисляемых полях
Цел(ЗатраченоВремени/3600) + "0." + Цел((ЗатраченоВремени-Цел(ЗатраченоВремени/3600) *3600)/60)

если просто
Цел(ЗатраченоВремени/3600) тогда считает в часах, как добавить минуты ?
43 Kassern
 
06.12.22
10:55
(42) А кто вам в СКД разрешил числа со строками складывать?
44 Kassern
 
06.12.22
10:56
Вот это зачем "0." ?
45 Kassern
 
06.12.22
10:56
Создайте 2 поля на скд, одно минуты, другое часы. А дальше через макет СКД выведите, как вам нужно красиво.
46 mikecool
 
06.12.22
10:59
как все запущено оказалось...
47 Новый1сник2
 
06.12.22
11:09
(44) потому что если сложить 2 часа +30 мин, получится 32
48 Волшебник
 
модератор
06.12.22
11:12
(47) дели на 100
49 Kassern
 
06.12.22
11:12
(47) бред, даже в вашем случае будет 20.30 вместо 2 часа+30мин. Это при учете работы не в СКД.
50 Kassern
 
06.12.22
11:14
(48) плохая идея)) А если будет 2часа 40мин? вы получите 2.4 часа <> 2часа 40мин.
51 Волшебник
 
модератор
06.12.22
11:14
(50) ему надо в его дикую формулу ещё добавить деление на 100
52 Новый1сник2
 
06.12.22
11:15
(51) пробую уже
53 Kassern
 
06.12.22
11:15
(51) Все что ему надо, это просто получить 2 поля в СКД. В первом часы, во втором минуты. А дальше уже выводить их на макет с блек джеком и бантиками.
54 Волшебник
 
модератор
06.12.22
11:16
(53) Вы не понимаете вкус жизни. Ему надо повеселее
55 Новый1сник2
 
06.12.22
11:17
(51) все норм, только итог получается
264,30
288,30
552,60
56 Kassern
 
06.12.22
11:19
(54) ну если со вкусом жизни, то пускай с побитовыми операциями любится)
57 Новый1сник2
 
06.12.22
11:23
если мин отдельно выводить, в итогах также часов 552 минут 60 ))
58 KJlag
 
06.12.22
11:25
(0) но ведь он действительно должен жаловаться на Дата(1,1,1,288,0,0)
59 Новый1сник2
 
06.12.22
11:30
как с итогами то быть? 120 мин округляет как 1ч 20 мин
60 Kassern
 
06.12.22
11:31
(59) ахах, классно вы работу людям насчитаете)) Работодатель будет рад, а вот сотрудники...
61 Волшебник
 
модератор
06.12.22
11:33
(59) Поделить на 60, потом умножить на 100, вычесть 3600. Должно помочь
62 Новый1сник2
 
06.12.22
11:37
а если в запросе разность дат в минутах / 60 ?
63 Kassern
 
06.12.22
11:38
(61) Это вы так тонко троллите ТС?)) 120/60*100-3600=-3400. Что дальше ему делать с этим числом?) За такое время в табелях сотрудники его же побьют...
64 Kassern
 
06.12.22
11:39
(62) Зачем?
65 Новый1сник2
 
06.12.22
11:51
да весело с датами работать, в таблице нормальное время показывает, в итогах нет. как итоги подравнять то ?
66 saasa
 
06.12.22
11:54
(0) график работы почему для расчета не используете ?
67 Новый1сник2
 
06.12.22
11:55
(66) там свой управленческий учет, часы работы сотрудника проставляются в заказе
68 Kassern
 
06.12.22
11:57
ДобавитьКДате(ДатаВремя(1, 1, 1), Секунда, РАЗНОСТЬДАТ(<Дата1>, <Дата2>, Секунда))  формат вывода значения в ячейке "Ч:мм".
69 Kassern
 
06.12.22
11:57
Так пробовали?
70 Новый1сник2
 
06.12.22
12:01
(68) это в запросе ?
71 Kassern
 
06.12.22
12:02
(70) А где по вашему еще есть метода ДобавитьКДате и РАЗНОСТЬДАТ?)
72 Kassern
 
06.12.22
12:02
*методы
73 Kassern
 
06.12.22
12:03
У вас стаж почти 7 лет на форуме, ни разу с этими методами в запросе не встречались?)
74 Ryzeman
 
06.12.22
12:04
(42) если в итоге всё свелось к СКД, то почему это всё запросом не сделать?

Если так уж сильно ненавидишь запросы, что кушать не можешь - сделай через ресурсы. Там есть все формулы для этого и по итогам считать как хочешь можно.
75 Новый1сник2
 
06.12.22
12:06
(73) да просто раньше не было таких задач
76 Новый1сник2
 
06.12.22
12:48
вот нашел https://forum.infostart.ru/forum9/topic227457/

есть формула Строка(Сумма(ЧАС(ЗатраченоВремени)) + (Сумма(Минута(ЗатраченоВремени)) - Сумма(Минута(ЗатраченоВремени)) % 60) / 60) +":"+ Строка( Сумма(Минута(ЗатраченоВремени)) % 60)

только почему то часы не видит только минуты
77 Новый1сник2
 
06.12.22
13:24
благодарю, все получилось
78 Новый1сник2
 
06.12.22
13:25
вот такая формула
Строка(Сумма(ЗатраченоВремениВчасах) + (Сумма(ЗатраченоВремениВминутах) - Сумма(ЗатраченоВремениВминутах) % 60) / 60) +":"+ Строка( Сумма(ЗатраченоВремениВминутах) % 60)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший