Имя: Пароль:
1C
1С v8
Преобразование минуты в часы и дни
0 мистер игрек
 
17.05.12
08:52
Есть готовая функия в типовых?
1 andrewks
 
17.05.12
08:53
да.
2 echo77
 
17.05.12
08:55
поделить на (60*24), поделить на 60
3 мистер игрек
 
17.05.12
08:57
(2) Знаю, просто хотел посмотреть и сравнить с моим
4 andrewks
 
17.05.12
09:04
(3) а что, могут быть варианты?
5 мистер игрек
 
17.05.12
09:08
(4) Может мой код не компактный по сравнению с типовым
6 andrewks
 
17.05.12
09:09
(5) думаешь, ихний код занимает меньше одной строчки?
7 мистер игрек
 
17.05.12
09:13
(6) Просто интересно, какой у них метод. Просто спортивны
8 мистер игрек
 
17.05.12
09:13
й интерес
9 Maxus43
 
17.05.12
09:14
свою покажи
10 мистер игрек
 
17.05.12
09:17
Здесь имеется ввиду, что 480 минута - это 1 день            




ВсегоВремени  = Услуги.Итог("Время");
           Если ВсегоВремени < 60 Тогда
               ЭлементыФормы.Услуги.Колонки.Время.ТекстПодвала = Строка(ВсегоВремени)+" м.";
           ИначеЕсли ВсегоВремени = 60 Тогда
               ЭлементыФормы.Услуги.Колонки.Время.ТекстПодвала = " 1 ч.";
           ИначеЕсли ВсегоВремени > 60 И ВсегоВремени < 480 Тогда
               ЭлементыФормы.Услуги.Колонки.Время.ТекстПодвала = Строка(Цел(ВсегоВремени/60))+" ч."+Строка(ВсегоВремени%60)+" м.";
           ИначеЕсли ВсегоВремени = 480 Тогда
               ЭлементыФормы.Услуги.Колонки.Время.ТекстПодвала = "1 д.";
           ИначеЕсли ВсегоВремени > 480 Тогда
               //Здесь еще не дописал
           КонецЕсли;
11 andrewks
 
17.05.12
09:21
жесть
12 mikecool
 
17.05.12
09:22
продолжить надо так
ИначеЕсли ВсегоВремени = 540 Тогда
 ЭлементыФормы.Услуги.Колонки.Время.ТекстПодвала = "1 д. 1ч. ";
и т.д.
13 Maxus43
 
17.05.12
09:23
Дни = ЦЕЛ(Минуты / 60 / 24) и т.д., если не 0 тогда добавляй свой "Х д."
проще же
14 andrewks
 
17.05.12
09:23
Строка(Цел(ВсегоВремени/86400))+" д. "+Строка(Цел(ВсегоВремени/3600))+" ч. "+Строка(Цел(ВсегоВремени/60))+" м. "+Строка(ВсегоВремени%60)+" с."
15 smaharbA
 
17.05.12
09:25
и попадешь в будущее или прошлое
16 мистер игрек
 
17.05.12
09:26
(14) Это было шутка, да?
17 Maxus43
 
17.05.12
09:29
(16) почему?
18 мистер игрек
 
17.05.12
09:30
(17) Ты проверь 3218 минут в этой формуле
19 Maxus43
 
17.05.12
09:31
(18) ну ВсегоВремени * 60 сделай сначала. он писал для секунд
20 Живой Ископаемый
 
17.05.12
09:32
2(16) не шутка, просто человек секунды преобразовал
тебе так:
Строка(Цел(145/1440))+" д. "+Строка(Цел(145/60))+" ч. "+Строка(145%60)+" м. "
21 andrewks
 
17.05.12
09:33
а, ну да, не обратил внимание, что речь про минуты, а не секунды
22 Maxus43
 
17.05.12
09:33
автор, с похмелья чтоль?) не ожиданно как то
23 Живой Ископаемый
 
17.05.12
09:34
24 Maxus43
 
17.05.12
09:36
Строка(Цел(145/1440))+" д. "+Строка(Цел(145 - Цел(145/1440)*1440)/60)) и т.д.
25 Irbis
 
17.05.12
09:37
ИначеЕсли ВсегоВремени = 480 Тогда
               ЭлементыФормы.Услуги.Колонки.Время.ТекстПодвала = "1 д.";
Это полный бред, это даже не полдня
26 мистер игрек
 
17.05.12
09:37
(19) ок. А если всего 60 минут, тогда должна отображаться только "1 ч."
Здесь эта формула бессильна.
А еще, если всего 123 минута, тогда дни не должны отображатся.
27 Reset
 
17.05.12
09:37
(10) "Здесь еще не дописал" :D
Спасибо за поднятое с утра настроение ;)
28 andrewks
 
17.05.12
09:38
(26) да ёшкин кот. а дописать слабо?
29 Живой Ископаемый
 
17.05.12
09:39
2(26) ну то есть ты никак не сможешь сконвертироватьсвой почти восьмилетний опыт сидения на форуме в какой-то код, который учтет это?
30 мистер игрек
 
17.05.12
09:47
(28) Все таки твоя изяшная формула дорастет до размера моего кода, не так? :)
31 andrewks
 
17.05.12
09:47
(30) нет
32 Maxus43
 
17.05.12
09:48
(30) нет
Дни = ...
Часы = ...
Месяцы = ...
Строка = ?(Дни >0, Строка(Дни) + " д.", "") + ....

при желании в одну строку слепить
33 Maxus43
 
17.05.12
09:48
*месяцы = минуты
34 andrewks
 
17.05.12
09:50
?(ВсегоВремени>=1440,Строка(Цел(ВсегоВремени/1440))+" д. ","")+?(ВсегоВремени>=60,Строка(Цел(ВсегоВремени/60))+" ч. ","")+Строка(Цел(ВсегоВремени%60))+" м. "
35 Stepa86
 
17.05.12
09:50
Функция ФорматВремени( КоличествоСекунд )
   
   Если КоличествоСекунд < 24*60*60 Тогда
       
       Возврат Формат( Дата(1,1,1) + КоличествоСекунд , "ДФ='HH""ч."" mm""м.""'; ДП=0:00:00" );
       
   Иначе
       
       Возврат Формат( Дата(1,1,1) + КоличествоСекунд - 24*60*60, "ДФ='dd ""д."" HH""ч."" mm""м.""'; ДП=0:00:00" );
       
   КонецЕсли;
   
КонецФункции
36 мистер игрек
 
17.05.12
09:54
(34) Указал 60 минут, вот что выдает: "1ч. 0 м."

Так что не бинго :)
37 andrewks
 
17.05.12
09:55
(36)  а что, это не так?
38 мистер игрек
 
17.05.12
09:57
(37) В этом случае "0 м." не должен обображатся
39 andrewks
 
17.05.12
09:57
(38) кто сказал?
40 мистер игрек
 
17.05.12
09:57
(39) Ну клиент так хочеть
41 Aprobator
 
17.05.12
09:58
(0) шо - опять!?
42 Maxus43
 
17.05.12
10:11
(38) > (32)
З.ы. точно с похмелья ТС, это ж школьные алгоритмы
43 мистер игрек
 
17.05.12
10:23
(42) Давайте профессор, удивите меня. Ваш код в студию плиз.
44 DrShad
 
17.05.12
10:24
(35) малость не то, т.е. если 86400, то результат 00:00:00, а дни вообще не считает
45 Maxus43
 
17.05.12
10:26
(43)
Дни = Строка(Цел(ВсегоМин/1440);
Часы = Строка(Цел(ВсегоМин - Дни*1440)/60)) ;
Минуты= Строка(ВсегоМин %60)+" м. ";
Строка = ?(Дни >0, Строка(Дни) + " д.", "") + ?(Часы >0, Строка(Часы ) + " ч.", "") + ?(Минуты>0, Строка(Минуты) + " м.", "");  

на коленке писал, синтаксис подправиш если чо
46 Maxus43
 
17.05.12
10:28
*Минуты= Строка(ВсегоМин %60);
47 мистер игрек
 
17.05.12
10:34
(45)
{Форма.ФормаОтчета(10)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Результат = ?(Дни >0, Строка(Дни) + " д.", "") + ?(Часы >0, Строка(Часы ) + " ч.", "") + ?(Минуты>0, Строка(Минуты) + " м.", "");
48 rs_trade
 
17.05.12
10:44
пачему еще не было запроса? непорядок.

ВЫБРАТЬ
   РАЗНОСТЬДАТ(&Дата1, ДОБАВИТЬКДАТЕ(&Дата1, МИНУТА, &КолМинут), ДЕНЬ) КАК День,
   ЧАС(ДОБАВИТЬКДАТЕ(&Дата1, МИНУТА, &КолМинут)) КАК Час,
   МИНУТА(ДОБАВИТЬКДАТЕ(&Дата1, МИНУТА, &КолМинут)) КАК Минута
49 Maxus43
 
17.05.12
10:48
(47) всё за тебя делать? хватит издеваться то ёлки палки
50 мистер игрек
 
17.05.12
10:48
(48) Тут есть маленький ньюанс.
Здесь день не 1440 минут, а 480 минут
51 мистер игрек
 
17.05.12
10:49
(49) Ты давай, не отвлекайся. Доделай формулу :)
52 Maxus43
 
17.05.12
10:52
(51) учёл (46)?
53 Maxus43
 
17.05.12
10:52
код в студию полный
54 rs_trade
 
17.05.12
10:55
(50) че за планета? ))) умножай на 3
55 мистер игрек
 
17.05.12
11:00
Короче, текст должен выглядеть так:
0 минут     = ""
1 минут     = "1м."
60 минут    = "1ч."
61 минут    = "1ч.1м."
480 минут   = "1д."
481 минут   = "1д.1м"
540 минут   = "1д.1ч"
541 минут   = "1д.1ч.1м"
581 минут   = "1.2ч.1м."

и т.д.
56 НЕА123
 
17.05.12
11:07
(55)
читай (45) и (47).
57 Maxus43
 
17.05.12
11:09
Дни = Строка(Цел(ВсегоМин/480);
Часы = Строка(Цел(ВсегоМин - Дни*480)/60));
58 szhukov
 
17.05.12
11:24
(57) Ты же переменные привел к строке, а потом сравниваешь на больше с 0, поэтому наверное  и матерится, не?
59 rs_trade
 
17.05.12
11:25
лол

ВЫБРАТЬ
   РАЗНОСТЬДАТ(&Дата1, ДОБАВИТЬКДАТЕ(&Дата1, МИНУТА, &КолМинут*3), ДЕНЬ) КАК Дней,
   ЧАС(ДОБАВИТЬКДАТЕ(&Дата1, МИНУТА, &КолМинут-480*(РАЗНОСТЬДАТ(&Дата1, ДОБАВИТЬКДАТЕ(&Дата1, МИНУТА, &КолМинут*3), ДЕНЬ)))) КАК Часов,
   ЧАС(ДОБАВИТЬКДАТЕ(&Дата1, МИНУТА, &КолМинут-480*(РАЗНОСТЬДАТ(&Дата1, ДОБАВИТЬКДАТЕ(&Дата1, МИНУТА, &КолМинут*3), ДЕНЬ)))) КАК Минут
60 Maxus43
 
17.05.12
11:26
(58) да, это копипаст такой) на коленке писал, такие то ошибки автор сможет исправить?

Дни = Цел(ВсегоМин/480);
Часы = Цел(ВсегоМин - Дни*480)/60);
Минуты= ВсегоМин %60;
Строка = ?(Дни >0, Строка(Дни) + " д.", "") + ?(Часы >0, Строка(Часы ) + " ч.", "") + ?(Минуты>0, Строка(Минуты) + " м.", "");
61 Reset
 
17.05.12
11:28
(60) Зачем ему самому доделывать? Он тут нашел негров и понукает (51). Я бы не стал с ним возиться.
62 szhukov
 
17.05.12
11:28
(60) судя по его стартовому алгоритму и замечаниям - по этому поводу есть сомнения...:)
63 Serg_1960
 
17.05.12
11:40
ЧислоСекунд = Число(ТекущаяДата()-НачалоДня(ТекущаяДата()));
Т = Дата("00010101") + ЧислоСекунд;
   
ЧасыМинутыСекунды = "" + ?(Час(Т)<>0,СокрЛП(Час(Т))+"ч.","") + ?(Минута(Т)<>0,СокрЛП(Минута(Т))+"м.","") + ?(Секунда(Т)<>0,СокрЛП(Секунда(Т))+"с.","");
   
Сообщить(ЧасыМинутыСекунды);
Возврат;
64 Maxus43
 
17.05.12
11:42
(63) у него в сутках 8 часов. рабочее время считает видимо
65 мистер игрек
 
17.05.12
11:43
(60) Неа.
Опять облом
66 Maxus43
 
17.05.12
11:43
(65) конкретней
67 Maxus43
 
17.05.12
11:45
Часы = Цел(ВсегоМин)/60);
Дни = ?(Часы>8, ЦЕЛ(Часы/3), 0);
Часы = Часы - Дни*3;
Минуты= ВсегоМин %60;
Строка = ?(Дни >0, Строка(Дни) + " д.", "") + ?(Часы >0, Строка(Часы ) + " ч.", "") + ?(Минуты>0, Строка(Минуты) + " м.", "");
68 мистер игрек
 
17.05.12
11:45
(66)
4 = "0,066666666666666666666666667 ч.4 м"
69 Maxus43
 
17.05.12
11:46
(68) скобку передвинь, чо и это за тебя делать? я не тестирую
70 Maxus43
 
17.05.12
11:47
в (67) правильней имхо будет
71 Maxus43
 
17.05.12
11:50
* Дни = ?(Часы>8, ЦЕЛ(Часы/8), 0);
72 мистер игрек
 
17.05.12
11:57
Ффу. Наконецо реши. Вот Код:

Функция ПреобразоватьЧислоВВремя(ВсегоВремени) Экспорт
   Перем Остаток,Остаток2,Д,Ч;
   Если ВсегоВремени = 0 Тогда
       Возврат "";
   КонецЕсли;    
   Д        = ?(Цел(ВсегоВремени/480)=0,"",Строка(Цел(ВсегоВремени/480))+"д.");
   Остаток     = Всеговремени%480;
   Ч         = ?(Цел(Остаток/60)=0,"",Строка(Цел(Остаток/60))+"ч.");
   М         =?(ВсегоВремени%60=0,"",Строка(ВсегоВремени%60)+"м.");
   Возврат Д+Ч+М;
КонецФункции    


ЗЫ. Если кто нибудь надйте более короткий код или найдет в этом коде изьян, тому респект.
Всем спасибо.
75 Живой Ископаемый
 
17.05.12
20:32
что такое "более короткий"? без переводов строк и лишних переменных - будет ли считаться более коротким?
76 мистер игрек
 
18.05.12
09:57
(75) Проверить текс кода через
СтрДлина(Заменить(ТекстКода,""," "))

У кого самый короткий, тот круче :)
Это кодомер, у кого короче :)
77 Aprobator
 
18.05.12
10:07
код не должен быть коротким. Он должен быстрее работать. А длиннее, короче - нефига не критерий.
78 hhhh
 
18.05.12
10:07
(76) Однако зачем там Остаток2 у вас? Это как бы резервная переменная? Она находится на подхвате, если остальные переменные глюканут?
79 мистер игрек
 
18.05.12
10:10
(77) имеется ввиду: скорость такая же, но код короче
80 мистер игрек
 
18.05.12
10:10
(78) Я в спешке постанул, потом убрал его
81 мистер игрек
 
18.05.12
10:12
вот после преобразования:

Функция ПреобразоватьЧислоВВремя(ВсегоВремени) Экспорт
   Д        = ?(Цел(ВсегоВремени/480)=0,"",Строка(Цел(ВсегоВремени/480))+"д.");
   Ч         = ?(Цел(Всеговремени%480/60)=0,"",Строка(Цел(Всеговремени%480/60))+"ч.");
   М          =?(ВсегоВремени%60=0,"",Строка(ВсегоВремени%60)+"м.");
   Возврат ?(ВсегоВремени=0,"",Д+Ч+М);
КонецФункции
82 Aprobator
 
18.05.12
10:13
(79) улучшайзинг - зло отнимающее время. Лучше его на какие нибудь курсы это время потратить.
83 мистер игрек
 
18.05.12
10:18
(82) Отцепись, а?
84 hhhh
 
18.05.12
10:20
(81) нашел вот старую программу, вроде короче:

   Минут = Вр % 60;
   ДнейЧасов = (Вр - Минут) / 60;
   Если ДнейЧасов < 24 Тогда
       Возврат Прав("0" + СокрЛП(ДнейЧасов), 2) + ":" + Прав("0" + СокрЛП(Минут), 2);
   Иначе
       Часов = ДнейЧасов % 24;
       Дней = (ДнейЧасов - Часов) / 24;
       Возврат СокрЛП(Дней) + "д" + Прав("0" + СокрЛП(Часов), 2) + ":" + Прав("0" + СокрЛП(Минут), 2);
   КонецЕсли;
85 мистер игрек
 
18.05.12
10:25
(84) проверь через:
СтрДлина(Заменить(ТекстКода,""," "))