Имя: Пароль:
1C
 
Сложение времени и сортировка по времени
,
0 Cyr
 
31.12.13
12:44
Подскажите как в 1С 7.7 можно преобразовать строку в формат времени,   сложить 2 значения типа время. Отсортировать время в ТЗ.
1 ДенисЧ
 
31.12.13
12:47
в 77 нет формата времени (а что это такое?)
руками.
СформироватьПозицию()
2 Cyr
 
31.12.13
12:50
>СформироватьПозицию()
Работа не с документами.
3 ДенисЧ
 
31.12.13
12:50
(2) Какая разница?
4 Wobland
 
31.12.13
12:52
постою в сторонке, посмотрю, как семёрочники со временем воюют...
5 Cyr
 
31.12.13
13:31
(4) А что смотреть? Пришлось преобразовать время в секунды, сложить их, а потом это число преобразовать в строку. А строки ТЗ правильно сортирует.
6 Злопчинский
 
31.12.13
13:33
(5) ты не поверишь - оно правильно отсортирует если взять просто строку времени... другое время если тебе надо сортировать по абсолютной величине - типа 28часов 35 мин
7 Gepard
 
31.12.13
13:34
(5) если формат времени нормальный (с начальными нулями) то как строка тоже неплохо сортируется)
8 catena
 
31.12.13
13:34
(5)Особенно "1","2" и "10"...
9 Gepard
 
31.12.13
13:36
(7) без умножений, просто 08:20:40 и т.п.
10 Cyr
 
31.12.13
13:41
(6) У меня есть начальное значения в виде строки времени и продолжительность в виде числа секунд. Нужно эти значения сложить, а потом отсортировать.
11 Cyr
 
31.12.13
13:43
вызывает некоторую сложность преобразование числа в строку вида ЧЧ:ММ:CC после сложения.
12 zladenuw
 
31.12.13
13:55
(11) а все в секунды. а потом перевести в чч.мм.сс
13 Злопчинский
 
31.12.13
13:56
ну, можно нефигово извратиться, чтобы платформа за тебя преобразовала... правда только в пределах суток получается
http://infostart.ru/public/13835/
14 Андрюха
 
31.12.13
13:58

//*******************************************
// глВремяСтр()
//
Функция глВремяСтр() Экспорт
    Перем ЧЧ, ММ, СС;
    
    ТекущееВремя(ЧЧ, ММ, СС);
    
    Возврат (Прав("0" + Строка(ЧЧ),2) + ":" + Прав("0" + Строка(ММ), 2) + ":" + Прав("0" + Строка(СС),2));
    
КонецФункции // глВремяСтр

//*******************************************
// глВремяЧисло()
//
Функция глВремяЧисло() Экспорт
    Перем ЧЧ, ММ, СС;
    
    ТекущееВремя(ЧЧ, ММ, СС);
    
    Возврат ((ЧЧ * 3600) + (ММ * 60) + СС);
    
КонецФункции // глВремяЧисло


//*******************************************
// глВремяПарсинг()
//
Процедура глВремяПарсинг(Время, ЧЧ, ММ, СС) Экспорт
    
    ЧЧ = 0; ММ = 0; СС = 0;
    Если ПустаяСтрока(Время) = 0 Тогда
        ТекВремя = СокрЛП(Время);
        ЧЧ = Число(Лев(ТекВремя, 2));
        ММ = Число(Сред(ТекВремя, 4, 2));
        СС = Число(Прав(ТекВремя, 2));
    КонецЕсли;
    
КонецПроцедуры // глВремяПарсинг()

//*******************************************
// глВремяКорректно()
//
// Определяет соответствие времени формату ЧЧ:ММ:СС
//
Функция глВремяКорректно(СтрВремя) Экспорт

    Если (ПустаяСтрока(СтрВремя) = 1) ИЛИ (СтрДлина(СтрВремя) <> 8)  Тогда
        Возврат 0;
    КонецЕсли;
    
    Для Сч = 1 По 8 Цикл
        ТекСимв = Сред(СтрВремя, Сч, 1);
        Если (Сч = 3) ИЛИ (Сч = 6) Тогда
            Если ТекСимв <> ":" Тогда
                Возврат 0;
            КонецЕсли;
        Иначе
            Если Найти("0123456789", ТекСимв) = 0 Тогда
                Возврат 0;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    ЧЧ = 0; ММ = 0; СС = 0;

    глВремяПарсинг(СтрВремя, ЧЧ, ММ, СС);
    
    Если (ЧЧ > 23) ИЛИ (ММ > 59) ИЛИ (СС > 59) Тогда
        Возврат 0;
    КонецЕсли;
    
    Возврат 1;
    
КонецФункции // глВремяКорректно()


//*******************************************
// глВремяСекундыВСтроковоеЗначение()
//
Функция глВремяСекундыВСтроковоеЗначение(Секунды) Экспорт
    
    Если Секунды = 0 Тогда
        Возврат "";
    КонецЕсли;
    
    Часов = Секунды - (Секунды % 3600);
    Секунды = Секунды - Часов;
    
    Минут = Секунды - (Секунды % 60);
    Секунды = Секунды - Минут;
    
    Возврат глДополнитьСтрокуЛ(Строка(Часов/3600), "0", 2) + ":" + глДополнитьСтрокуЛ(Строка(Окр(Минут/60, 0, 1)), "0", 2) + ":" + глДополнитьСтрокуЛ(Строка(Окр(Секунды, 0, 1)), "0", 2);
    
КонецФункции // глВремяСекундыВСтроковоеЗначение()

//*******************************************
// глВремяСтроковоеЗначениеВСекунды()
//
Функция глВремяСтроковоеЗначениеВСекунды(Время) Экспорт
    Перем ЧЧ, ММ, СС;
    
    глВремяПарсинг(Время, ЧЧ, ММ, СС);

    Возврат (СС + (ММ * 60) + (ЧЧ * 3600));
    
КонецФункции // глВремяСтроковоеЗначениеВСекунды()

//*******************************************
// глВремяРазница()
//
// Возвращает разницу во времени в секундах
//
Функция глВремяРазница(СтрВремя1, СтрВремя2) Экспорт
    Перем ЧЧ, ММ, СС;

    Если (глВремяСтроковоеЗначениеВСекунды(СтрВремя1) = 0) ИЛИ (глВремяСтроковоеЗначениеВСекунды(СтрВремя2) = 0) Тогда
        Возврат 0;
    КонецЕсли;
    
    Время1 = глВремяСтроковоеЗначениеВСекунды(СтрВремя1);
    Время2 = глВремяСтроковоеЗначениеВСекунды(СтрВремя2);
    
    Если Время2 > Время1 Тогда
        Результат = Время2 - Время1;
    Иначе
        Результат = Время1 - Время2;
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции // глВремяРазница()


//*******************************************
// глВремяСравнить()
//
// Возвращает: -1, если Время1<Время2
//              0, если Время1=Время2
//              1, если Время1>Время2
//
Функция глВремяСравнить(Время1, Время2) Экспорт
    Перем ЧЧ1, ММ1, СС1;
    Перем ЧЧ2, ММ2, СС2;
  
    глВремяПарсинг(Время1, ЧЧ1, ММ1, СС1);
    глВремяПарсинг(Время2, ЧЧ2, ММ2, СС2);
    
    Если ЧЧ1 < ЧЧ2 Тогда
        Возврат -1;
    ИначеЕсли ЧЧ1 > ЧЧ2 Тогда
        Возврат 1;
    КонецЕсли;
    
    Если ММ1 < ММ2 Тогда
        Возврат -1;
    ИначеЕсли ММ1 > ММ2 Тогда
        Возврат 1;
    КонецЕсли;
    
    Если СС1 < СС2 Тогда
        Возврат -1;
    ИначеЕсли СС1 > СС2 Тогда
        Возврат 1;
    КонецЕсли;
    
    Возврат 0;
    
КонецФункции // глВремяСравнить()

// ************************************************************************
//
Функция глВремяУвеличитьСтроковоеЗначение(Время, КоличествоСекунд) Экспорт
    
    Результат = Время;
    Секунды = глВремяСтроковоеЗначениеВСекунды(Время) + КоличествоСекунд;
    ТекВремя = глВремяСекундыВСтроковоеЗначение(Секунды);
    Если глВремяКорректно(ТекВремя) = 1 Тогда
        Если КоличествоСекунд > 0 Тогда
            Если глВремяСравнить(Время, ТекВремя) < 0 Тогда
                Результат = ТекВремя;
            КонецЕсли;
        ИначеЕсли КоличествоСекунд < 0 Тогда
            Если глВремяСравнить(Время, ТекВремя) > 0 Тогда
                Результат = ТекВремя;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции
15 Cyr
 
31.12.13
14:23
Ну я так сделал:
ВремявСекундах=Число(Лев(Время,2))*3600+Число(Сред(Время,4,2))*60;
ВремявСекундах=ВремявСекундах+Продолжительность;
часы = Цел(ВремявСекундах/3600);
минуты=Цел(ВремявСекундах/60-Часы*60);
сек  = ВремявСекундах-часы*3600-минуты*60;
ТЗ.Время=Формат(часы,"Ч(0)2")+":"+Формат(минуты,"Ч(0)2")+":"+Формат(сек,"Ч(0)2");
AdBlock убивает бесплатный контент. 1Сергей