Имя: Пароль:
1C
1С v8
Вывод даты с учётом полученных значений
,
0 pauk
 
26.01.22
15:57
Помогите пожалуйста.
На курсе по программированию дали задание с вычислением времени до конца суток. Естественно выводятся часы, минуты и секунды. К примеру, "2 час. 11 мин. 46 сек.".
Есть необязательная часть, чтобы выводился текст с учётом значений, т.е., например, "10 часов 23 минуты 15 секунд", но "3 часа 21 минута 23 секунды". Я знаю как это реализовать через цикл или условный оператор, но в задании четко сказано, что их использовать нельзя, потому что их не проходили, можно использовать только встроенные функции. Как это реализовать?
1 Ёпрст
 
26.01.22
16:00
Формат
2 Ёпрст
 
26.01.22
16:00
И пРопись
3 Ёпрст
 
26.01.22
16:08
точнее, ЧислоПрописью
4 Dmitrii
 
гуру
26.01.22
16:21
Скорее ПолучитьСклоненияСтрокиПоЧислу.
ЧислоПрописью будет числа прописью выводить, а нам надо цифрами.
5 Ёпрст
 
26.01.22
16:31
(4) да.. можно и так.
6 Serg_1960
 
26.01.22
16:32
х = НачалоДня(ТекущаяДата()) + (КонецДня(ТекущаяДата()) - ТекущаяДата());
Сообщить("" + Час(х) + " час. " + Минута(х) + " мин. " + Секунда(х) +" сек.");
7 Ёпрст
 
26.01.22
16:34
8 Ёпрст
 
26.01.22
16:34
(6) ему нужно полностью
9 Serg_1960
 
26.01.22
16:45
(8) Я ответил на "дали задание"(0). А "необязательная часть" - мне не интересно писать склонение единиц измерения - это рутинная операция :)
10 hhhh
 
26.01.22
16:48
(9) вы, наверно, (0) не читали. Там спрашивают как раз именно про склонение.
11 Serg_1960
 
26.01.22
16:51
(10) Читал. У автор вопросы не только про склонение.
12 Serg_1960
 
26.01.22
17:45
К теме склонения секунд :)

КолСек = Секунда(ТекущаяДата());
х = КолСек - Цел(КолСек*0.1)*10;
Сообщить(СокрП("" + КолСек + " секунд" + ?(КолСек > 9 И КолСек < 20,"", Сред(" аыыы     ",х+1,1))));
13 pauk
 
27.01.22
11:33
(3) Спасибо, но ты не правильно понял вопрос, мне числа нужно не прописью, а только "полная форма слова" обозначающие час, минуту и секунду )
(4) Ага, вчера с одним знакомым нашли эту замечательную функцию )
(11) (12) только про склонения, и по коду - нельзя использовать условный оператор, а он тут есть ) я также думал )

    _Вывод = ПолучитьСклоненияСтрокиПоЧислу("час", Час, "", "ПД=Именительный");
    _Час = _Вывод[0];
    _Вывод = (ПолучитьСклоненияСтрокиПоЧислу("минута", Минута, "", "ПД=Именительный"));
    _Минута = _Вывод[0];
    Сообщить(_Час + _Минута);
    
    _Вывод = Новый Массив();
    _Вывод[0] = (ПолучитьСклоненияСтрокиПоЧислу("час", Час, "", "ПД=Именительный"));
    _Вывод[1] = (ПолучитьСклоненияСтрокиПоЧислу("минута", Минута, "", "ПД=Именительный"));
    _Час = _Вывод[0];
    _Минута = _Вывод[1];
    Сообщить(_Час[0]+_Минута[0]);

Собственно задачу решил двумя способами, здесь краткие формы без секунд и вычислений дат, ибо они ещё в предыдущей части заданий сделаны
дабы предвосхитить вопрос "нафига через черту", я хз какие переменные уже в 1с по умолчанию, лишь перестраховка)
И... я хоть и понимаю, что функция создаёт массив, при своей работе... но почему, когда я формирую одномерный массив, я могу просто запихнуть значение в переменную (первый код), а когда я формирую массив из 2х элементов и пытаюсь в переменную запихнуть определённый элемент массива, то пихается массив (второй код)?
Собственно, если выводить _Час и _Минута без индекса, то программа выдаст слово "Массив", а не результат
14 Ёпрст
 
27.01.22
13:54
(13) ПолучитьСклоненияСтрокиПоЧислу возвращает массив. Во "втором" как ты говоришь коде, ты уже в свой массив помещаешь еще один массив, у тебя элементы первого твоего массива - это тоже массив, полученный из ПолучитьСклоненияСтрокиПоЧислу . Так понятнее ?
15 Ёпрст
 
27.01.22
13:56
+(14 )  
_Час = _Вывод[0]; //тут ты получаешь первый элемент своего массива, элемент этого массива - тоже массив, полученный из ПолучитьСклоненияСтрокиПоЧислу.